c程序的源文件和头文件内容都是代码,代码是文本信息,但是电脑能执行的是二进制指令。因此,要使电脑能读懂你写的代码,这就需要编译与链接的过程。
在ANSI C(标准c)的任何一种实现中,存在两个不同的环境,分别是翻译环境和执行环境。
1.翻译环境中,源代码被转化成可执行的机器指令(二进制指令)。由编译器执行。
2执行环境则用于实际执行代码。 由计算机操作系统执行。
翻译环境由编译与链接两个大的过程组成。编译又由预处理(预编译)、编译、汇编这三个过程组成。
在linux环境下以gcc为例
一、在预处理阶段,源文件和头文件都会被处理为以.i为后缀的文件。
预处理阶段主要处理源文件中以#开头的预处理指令(如#include,#define等)。处理的规则如下:
1.将所有的#define删除,并将代码里的宏替换。
2.处理所有的条件编译指令如#if、#ifdef等。
3.处理#include预处理指令,将包含头文件的内容插入到该预编译的位置,
4.删除所有注释。
5.还有很多细节,不展开说明。
二、编译过程将预处理文件进行词法分析、语法分析、语义分析及优化等一系列操作,从而生成汇编代码文件。
三、编译结束后就是汇编,从而生成目标文件。
四、目标文件和链接库通过链接器,产生可执行程序。