1.预处理
预处理过程主要是处理那些源文件和头文件中以#开头的命令,预处理的规则一般如下:
1.对所有的宏定义进行替换
2.处理所有条件编译命令
3.处理#include命令,将被包含文件的内容插入到该命令所在的位置
4.删除所有的注释//和/* … */
5.添加行号和文件名标识,便于在调试和出错时给出具体的代码位置
6.保留所有的#pragma命令,因为编译器需要使用它们
2.编译
编译就是把预处理完的文件进行一些列的词法分析、语法分析、语义分析以及优化后生成相应的汇编代码文件。
3.汇编
汇编的过程就是将汇编代码转换成可以执行的机器指令。大部分汇编语句对应一条机器指令,有的汇编语句对应多条机器指令。
汇编过程相对于编译来说比较简单,没有复杂的语法,也没有语义,也不需要做指令优化,只是根据汇编语句和机器指令的对照表一一翻译就可以了。
4.链接
目标文件已经是二进制文件,与可执行文件的组织形式类似,只是有些函数和全局变量的地址还未找到,程序不能执行。链接的作用就是找到这些目标地址,将所有的目标文件组织成一个可以执行的二进制文件。