跳转至

编译的整体流程

C语言编译流程分为四个主要阶段:预处理、编译、汇编和链接。

流程名称 作用 输入 输出
预处理 展开头文件(如#include)、替换宏定义(如#define)、处理条件编译指令(如#ifdef)。 源代码文件(.c预处理后的文件(.i
编译 将预处理后的代码翻译为汇编代码。编译器会检查语法和语义错误。 预处理后的文件(.i汇编代码文件(.s
汇编 将汇编代码转换为机器码,生成目标文件。 汇编代码文件(.s目标文件(.o.obj
链接 将目标文件与库文件或其他目标文件合并,生成最终的可执行文件。 目标文件(.o.obj)和库文件 可执行文件(如.exe./a.out

流程说明:

  1. 预处理:
  2. 由预处理器完成,主要处理源代码中的预处理指令(如#include#define等)。
  3. 生成的文件是纯C代码,但已经去掉了头文件和宏定义。

  4. 编译:

  5. 由编译器完成,将预处理后的代码转换为汇编代码。
  6. 编译器会进行语法和语义检查,确保代码符合C语言规范。

  7. 汇编:

  8. 由汇编器完成,将汇编代码转换为机器码。
  9. 生成的目标文件是二进制格式,包含程序的机器指令。

  10. 链接:

  11. 由链接器完成,将目标文件和库文件合并,生成最终的可执行文件。
  12. 链接器会解决函数和变量的引用问题,确保程序能够正确运行。