C++源文件编译会有以下四个部分:编译预处理 => 编译、优化阶段(编译原理便用于这个阶段)=> 编译过程,编译成目标文件.o文件 => 链接成binary文件
1. 编译预处理:
- 宏定义指令:如#define Name TokenString,#undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换
- 条件编译指令:如#ifdef,#endif,预编译程序将根据有关文件将那些不必要的文件过滤掉
- 头文件包含指令:#include"FileName"等,将相应的文件包含进来
- 特殊符号:预编译长须可以识别一些特殊的符号,例如#line表示将被解释成当前行号
- 预处理模块:#Pragma完成,这个命令将设置编译器的状态或者是指示编译器完成一些特定的动作
2. 编译、优化阶段
经过预编译得到的输出文件中,只有常量,如数字、字符串、变量的定义、关键字if else for等等
词法分析 -> 语法分析 -> 语义分析 -> 中间代码生成 -> 代码优化 -> 代码生成 -> 符号表管理 -> 将多个步骤组合成趟 -> 编译器构造工具
3.汇编过程
汇编雨涵代码翻译成目标机器指令的过程,对于被翻译系统处理的每一个Cpp语言源程序,都将处理得到目标文件 .O文件
目标文件有段组成,通常一个目标文件至少有2个段:数据段和代码段
4. 链接程序
将相关的目标文件彼此相连接:静态链接、动态链接