编译通常分为下面几个阶段完成从文本文件到目标文件的编译-预处理阶段、语言分析阶段、汇编阶段、优化阶段和代码生成阶段。
预处理阶段:
将#include关键字表示的含有定义的文件(包含文件或头文件)包含到源代码中;
将#define语句指定的值转换成代码;
在代码中调用红的位置将宏定义转换成特定部分的代码;
根据#if、#elif和#endif指令的位置包含或排除特定部分代码;
语言分析阶段:
编译i器先将代码转换成更易于处理的形式。通过词法分析,就可以得到这种优化和不必要的空格,以及从文本中提取符号等操作,通过词法分析,就可以得到这二种精简和优化的源代码形式,词法分析的目的在于检查程序是否满足编译语言的语法规则。编译器会在检查到不满足语法规则错误的时候报告错误或发出警告。编译错误会导致编译过程中断,而编译警告则不一定。对于编译警告来说,是否中断编译过程取决于用户的设置。
该阶段可细分为三个不同的阶段:
词法分析:将源代码分割成不可分割的单词。
语法分析:将提取出来的单词连接成单词序列,并根据语言规则验证其顺序是否合理。
语义分析:目的是发现符合于发规则的语句是否具有实际意义。
汇编阶段
当源代码经过校验之后,其中不包含任何错误后,编译其开始执行汇编阶段,在本阶段编译器会为标准的语言集合转换成特定CPU指令集的语言集合。
优化阶段
当由源代码文件生成最初版本的汇编代码之后,优化过程就开始,可以将程序的寄存器使用率最小化。此外,通过分析能够预测出实际不需要换成对应机器指令的二进制值,并写入目标文件的特定位置。
创建的目标文件还不足以让处理器执行。