标准C++将编译过程定义为9个阶段:
1. 字符映射:文件中的物理源字符被映射到源字符集中,其中包括三字符运算符的替换、控制字符(行尾的回车换行)的替换。
2. 行合并:以反斜杠结束的行和它接下来的行合并
3. 标记化:每一条注释被一个单独的空字符所替换,源代码被分析成预处理标记
4. 预处理:调用预处理指令并扩展宏,使用include指令包含的文件,重复1到4阶段。1到4阶段统称为预处理阶段。
5. 字符集映射:源字符集成员、转义序列被转换成等价的执行字符集成员
6. 字符串连接:将相邻的字符串进行连接
7. 翻译:将写好的C++程序代码进行语法和语义分析编译,并翻译成可执行的目标代码
8. 处理模板:此时会调用库函数
9. 链接:把所有编译好的单元全部链接为一个整体文件,其实这一步可以比作是一个“连线的过程。”链接时最重要的是检查全局空间里面是不是有重复定义或者缺失定义。
链接包括三个过程:预编译,编译,链接
编译阶段分两步:检查函数或者变量是否存在它们的声明;检查语句是否符合C++语法
预编译阶段粗略的认为就是“宏展开”,即建立名与体的对等关系,以便在编译阶段进行替换。
编译:将源代码转换为机器可认识代码的过程。编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序