C语言的编译链接过程要把我们编写的一个c程序(源代码)转换成可以在硬件上运行的程序(可执行代码),需要进行编译和链接。编译就是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。过程图解如下:
从图上可以看到,整个代码的编译过程分为编译和链接两个过程,编译对应图中的大括号括起的部分,其余则为链接过程。
1编译过程
编译过程又可以分成两个阶段:编译和汇编。
f11编译
编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两个主要阶段:
111编译预处理
读取c源程序,对其中的伪指令(以开头的指令)和特殊符号进行处理。伪指令主要包括以下四个方面:1宏定义指令,如defi
eNameToke
Stri
g,u
def等。对于前一个伪指令,预编译所要做的是将程序中的所有Name用Toke
Stri
g替换,但作为字符串常量的Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。2条件编译指令,如ifdef,if
def,else,elif,e
dif等。这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉。3头文件包含指令,如i
clude