C++编译过程

C++编译过程主要分为,预处理、编译、汇编、链接四个过程。如下图所示:
C++编译过程

第一步:预处理

将源代码的.c 、.cpp 、.h 等文件包含到一个文件中。在这个过程中会使用一些预处理指令要求编译器使用什么样的方式包含这些文件。预处理结束之后对于c语言编译器会生成一个.i 文件。C++会生成.ii文件。

【了解即可】
预编译过程主要处理那些源代码中以#开始的预编译指令,主要处理规则如下:
将所有的#define删除,并且展开所有的宏定义;
处理所有条件编译指令,如#if,#ifdef等;
处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。该过程递归进行,及被包含的文件可能还包含其他文件。
删除所有的注释//和 /**/;
添加行号和文件标识,如#2 “hello.c” 2,以便于编译时编译器产生调试用的行号信息及用于编译时产生编译错误或警告时能够显示行号信息;
保留所有的#pragma编译器指令,因为编译器须要使用它们;

第二步:编译

编译过程就是把预处理完的文件进行一系列词法分析,语法分析,语义分析及优化后生成相应的汇编代码文件.

第三步:汇编

汇编器是将汇编代码转变成机器可以执行的命令,每一个汇编语句几乎都对应一条机器指令。汇编相对于编译过程比较简单,根据汇编指令和机器指令的对照表一一翻译即可。

第四步:链接

链接器ld将各个目标文件组装在一起,解决符号依赖,库依赖关系,并生成可执行文件。