c++程序的编译主要包含两个阶段:源码编译(翻译阶段)和目标文件链接。
源码编译过程主要有如下这些阶段:
阶段1: 翻译源码文本字符
阶段2: 逻辑源码行标准化处理
阶段3: 文法处理,分解为不同的源码文本类型序列。例如分解为注释、预处理指令、标识符,以一个空格字符替换每段注释等操作等等。
阶段4: 执行预处理器,执行所有预处理,并在处理完成后将所有预处理指令从源码中移除
阶段5: 构造执行字符集
阶段6: 拼接相邻的字符串字面量
阶段7: 进行编译:将各个预处理记号转换成记号。将所有记号当作一个翻译单元进行语法和语义分析并进行翻译。
阶段8: 检验每个翻译单元,产生所要求的模板实例化的列表,其中包括显式实例化所要求的实例化。定位模板定义,并进行所要求的实例化,以产生实例化单元。
阶段9: 将翻译单元、实例化单元和为满足外部引用所需的库组件汇集成一个程序映像,它含有在它的执行环境中执行所需的信息。可以理解为生成了.obj或者.o文件。
后续就进入链接过程了。