C语言编译全过程
C语言编译全过程 编译的概念:编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。 编译的完整过程:C源程序-- > 预编译处理 ( . c ) -- > 编译、优化程序( . s、 . asm)-- > 汇编程序 ( . obj、 . o、 . a、 . ko ) -- > 链接程序( . exe、 . elf、 . axf等) 1 . 编译预处理 读取c源程序,对其中的伪指令(以 # 开头的指令)和特殊符号进行处理 伪指令主要包括以下四个方面: (1)宏定义指令,如 # define Name TokenString, # undef等。 对于前一个伪指令,预编译所要做的是将程序中的所有Name用TokenString替换,但作为字符串常量的 Name则不被替换。对于后者,则将取消对某个宏的定义,使以后该串的出现不再被替换。 (2)条件编译指令,如 # ifdef, # ifndef, # else, # elif, # endif等。 这些伪指令的引入使得程序员可以通过定义不同的宏来决定编译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些不必要的代码过滤掉 (3) 头文件包含指令,如 # include "FileName" 或者 #