zoukankan      html  css  js  c++  java
  • C语言知识一 GCC与编译过程

      对于计算机语言的学习,我们需要学习(1)基本的程序设计的思想;(2)语言工具的特性。基本的程序设计思想是对所有程序设计语言而言的,是通用的;而语言工具的特性是针对具体的语言而言的,是每种语言独特的。这里我们关注的是语言工具的特性。c语言的工具特性为:(1)对于底层的操作,如对内存地址的寻址和操作,对指针的使用;

      对于c语言的学习,重视:(1)c语言的设计思想,与核心规律;(2)理解掌握,什么时候用?什么时候用?为什么要这样设计?

     一:GCC的使用和常用选项

    1、gcc概述

      gcc起初的名字为GNU c compile,后来随着支持的语言变多,变为GNU compile collection。gcc是可以理解为翻译官,翻译组织,包含有翻译成员。不同成员之间相互配合,完成人与人之间交流的语言转变为机器可以识别的二进制指令,在计算机上执行,也就是人与机器之间交流的桥梁。常用的指令选项有:(1)gcc -o output mian.c  (2)gcc -c -o main.o main.c  (3)gcc -S -o main.s main.c  (4)gcc -E -o main.i main.c  (5) gcc -I 包含头文件的路径

      可以使用gcc -v -o build main.c 命令查看整个编译链接的过程。整个过程分为(1)预处理(2)编译(3)汇编(4)链接

    2、c语言的编译过程

      预处理:

      cpp -o main.i main.c

      在查看整个编译链接的过程中看不到,在命令cc1执行中包含了该命令的执行。

      实际使用命令:gcc -E -o main.i main.c

      编译:

      /usr/lib/gcc/i486-linux-gnu/4.4.3/cc1 -quiet -v main.c -o /tmp/ccW03FvH.s .....(还有一些其他选项)

      实际使用命令:gcc -S -o main.s main.c

      汇编: 

      as -V -Qy -o /tmp/cctZ6SQm.o /tmp/ccW03FvH.s

      实际使用命令:gcc -c -o main.o main.s

      链接:

      lib/gcc/i486-linux-gnu/4.4.3/collect2 -o build main.o .....(还有很多其他的.o,自己的或者系统的)

      实际使用命令:gcc -o build main.c

    3、编译过程中的一些常见错误

      预处理错误:#include<>(引用库中的头文件);#include ""(引用自己写的头文件),可能会出现找不到文件的错误。<>表示到系统的环境变量中去找,“”表示在当前目录中寻找文件。自己写的头文件可以放到一个目录下,用gcc -I 添加查找头文件的目录。

      编译错误:常见语法错误

      链接错误:(1)原材料不够,查找的函数具体实现没有被链接进来(2)原材料多余,查找的函数具体实现重复了

    4、宏的使用

    #include

    #define

    #ifdef #else #endif

    预定义宏:__FUNCTION__  __LINE__  __FILE__

       调试版本和发行版本的处理:(1)在文件中通过添加#define ABC进行条件预编译处理,添加或者去除处理;(2)通过命令 gcc -DABC 处理,-D后面不能有空格。两者否需要在其他处用#ifdef  #else  #endif  实现处理

      #define 定义函数和使用,实现的原理类似于python的lamda函数。#号实现字符串化,##号实现连接,相当于前缀后缀。

     

  • 相关阅读:
    深入了解css的行高Line Height属性
    Kafka消息队列
    架构图
    清理肠道好方法
    维特根斯坦
    ES查询DSL大于小于写法
    python虚拟环境
    Dockerfile
    flask基本使用
    泛型类多个类型参数的定义
  • 原文地址:https://www.cnblogs.com/zjsthunder/p/11296554.html
Copyright © 2011-2022 走看看