1,编译预处理(gcc -E main.c -o main.i)
- 文件包含复制 将源文件中一"#include"格式包含的文件复制到编译的源文件中
- 宏定义替换 用实际的值替换用"#define"定义的字符串
__DATE__:当前源程序的创建日期。
__FILE__:当前源程序的文件名称(包括盘符和路径)。
__LINE__:当前被编译代码的行号。
__STDC__:返回编译器是否位标准C,若其值为1表示符合标准C,否则不是标准C.
__TIME__:当前源程序的创建时间。- 决定编译代码 根据"#if"条件决定需要编译的实际代码
- 删除注释 行注释和块注释
2,编译(gcc -S main.i -o main.s)
- 对预处理过后的文件进行一系列的词法分析,语法分析,语义分析以及进行相关的优化,生成相应的汇编代码文件
3,汇编(gcc -c main.c -o main.o)
- 将编译过的汇编代码翻译成目标机器指令的过程
4,链接(ld)
- 将不同部分的代码和数据收集和组合成为一个单一文件的过程,将相关目标指令文件链接,使其成为一个整体可以被OS执行
- 连接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件