我们通常所说的编译是一个比较含糊的概念。从c++代码到程序真正要经过4个步骤:
预处理->编译->汇编->链接
预处理
- 将所有的“#define”都删除,并且展开所有的宏定义。
- 处理所有的预编译指令,如“#if”、“#ifdef”、“#elif”、“#else”、#endif“。
- 处理”#include“预编译指令,将被包含的文件插入到”#include“对应的位置,也就是替换的意思。该替换是递归进行的,就是说替换的文件还可能包含其他的文件。
- 删除所有的注释。c++的注释使用”//“和”/* */”来标识。
- 添加行号和文件名标识,以便于编译时编译器能产生调试用的行号信息以及编译错误或警告时能够显示行号。
- 保留所有的#pragma编译器指令,编译时会需要它们
编译
编译是一个比较复杂的过程,该过程包含以下几个步骤:
- 词法分析
- 语法分析
- 语义分析
- 优化
- 生成汇编代码文件
汇编
汇编是将汇编代码转变为机器可以执行的指令,每一条汇编语句都几乎对应一条机器指令。因此该过程比较简单。