编译的整体流程
C语言编译流程分为四个主要阶段:预处理、编译、汇编和链接。
| 流程名称 | 作用 | 输入 | 输出 |
|---|---|---|---|
| 预处理 | 展开头文件(如#include)、替换宏定义(如#define)、处理条件编译指令(如#ifdef)。 | 源代码文件(.c) | 预处理后的文件(.i) |
| 编译 | 将预处理后的代码翻译为汇编代码。编译器会检查语法和语义错误。 | 预处理后的文件(.i) | 汇编代码文件(.s) |
| 汇编 | 将汇编代码转换为机器码,生成目标文件。 | 汇编代码文件(.s) | 目标文件(.o或.obj) |
| 链接 | 将目标文件与库文件或其他目标文件合并,生成最终的可执行文件。 | 目标文件(.o或.obj)和库文件 | 可执行文件(如.exe或./a.out) |
流程说明:¶
- 预处理:
- 由预处理器完成,主要处理源代码中的预处理指令(如
#include、#define等)。 -
生成的文件是纯C代码,但已经去掉了头文件和宏定义。
-
编译:
- 由编译器完成,将预处理后的代码转换为汇编代码。
-
编译器会进行语法和语义检查,确保代码符合C语言规范。
-
汇编:
- 由汇编器完成,将汇编代码转换为机器码。
-
生成的目标文件是二进制格式,包含程序的机器指令。
-
链接:
- 由链接器完成,将目标文件和库文件合并,生成最终的可执行文件。
- 链接器会解决函数和变量的引用问题,确保程序能够正确运行。