从源文件(.c,.cpp,.h)到可执行文件(.exe,.dll——不是只有exe才叫可执行文件)依次经历下面几个过程
预处理阶段
尽管现在编译器都包含了预处理器,但是通常预处理是独立编译阶段的。也有的称这一阶段为预编译阶段。
预处理主要对条件编译指令及对宏定义的展开(替换)和对#include的处理等(注意:保留所有的#pragma编译指令,因为编译器需要使用它们),同时也会删除程序中的注释和多余的空白符,经过预处理后生成一个没有宏定义、条件编译指令、没有特殊符号的文件,这个文件与与源文件并无本质区别
编译阶段
编译阶段是将.i文件生成机器语言.s。这一阶段主要是与语法上的检查和代码优化。语法上的检查有静态和动态。对于静态检查是指不用经过运算即可完成的检查,如类型转换;动态检查是指在运行阶段才能完成的,如除0操作。
优化阶段
现在的优化主要有两类,一类是与硬件相关,另一类是与硬件无关。与硬件相关的优化是:借助硬件的性能,减少内存访问次数以及硬件执行指令的特点(如流水线、RISC、CISC、VLIW等)而对指令进行一些调整使目标代码比较短,从而提高效率;与硬件无关主要表现在优化循环(削弱强度,代码外提)、删除无用变量等
汇编阶段
汇编阶段就是将机器语言转换