c语言程序的编译一般分成4个阶段,上一个阶段的输出作为下一个阶段的输入,最终的输出是一个可执行的目标文件。
第零阶段:这个阶段就是程序员使用自己喜欢的文本编辑器来写出C语言程序代码。
第一阶段,预处理阶段:这个阶段会以程序员写出的文本C语言程序作为输入,预处理器会处理程序中的#include <...> 这样的行,它会读取并将对应的代码插入到程序文本中。
第二阶段,编译阶段:这个阶段就是要将人类更易理解的C语言,通过编译器将其翻译成介于人与机器之间的汇编语言。不仅仅是c编译器,其它的编译器也会将其代码翻译成汇编代码,这可以看成是一个中间层。当然,如果有需要,人类也可以直接使用汇编语言来完成程序的编写,不过在表达能力上肯定没有高级语言便利。
第三阶段,汇编阶段:在这一阶段,上一阶段生成的汇编语言代码,会被翻译成机器能够直接理解的机器指令,一般其输出为一个.o文件,称为可重定位的目标程序。机器指令就是机器能够理解的01位的组合。
第四阶段,链接阶段:此阶段会将上一阶段生成的.o文件与引用的其它的.o文件进行合并,使程序能够正常工作,最终其生成的就是一个可执行的目标程序。至此,整个编译系统的工作就完成了。
整个编译系统包括:预处理器,编译器,汇编器和链接器。