A.编译预处理 C程序在编译之前执行的操作,如宏定义指令(#define),条件编译指令(#ifdef,#ifndef),头文件包含指令(#include)等 。预处理,基本上完成的就是“拷贝”工作,生成一个没有上述指令的输出文件。
B.编译阶段 编译程序读取预处理后的文件(字符流),翻译成计算机可以识别的二进制形式的目标代码文件,由C的编译器完成。每个源文件是单独进行编译,每个.c文件编译成对应的.obj文件。在此阶段会对源程序语法等进行检查,若出现语法错误,则编译失败。
C.链接 目标文件不能立即就被执行,其中可能还有许多没有解决的问题。如,某个源文件中的函数可能引用了另一个源文件中定义的某个符号(如变量或者函数调用等);在程序中可能调用了某个库文件中的函数,等等。这些问题,都需要经链接程序的处理才能解决。链接程序主要就是将有关的目标文件彼此相连接,即将在一个文件中引用的符号同该符号在另外一个文件中的定义连接起来,使得所有的这些目标文件成为一个能够被操作系统装入执行的统一整体。