目录
一个现代编译器的主要工作流程:
源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables)
在Head First C中:1、预处理(修改代码)->2、编译(转化为汇编代码)->3、汇编(生成目标代码)->4、链接
注释
Head First C中有关编译过程,没有有C primer plus 中介绍的更加详细,这里的大部分知识点来自C primer plus
编译器:Compiler
编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
在Head First C
中:编译(转化为汇编代码)->汇编(生成目标代码)
链接器:Linker
链接器(Linker)是一个程序,将一个或多个由编译器或汇编器生成的目标文件外加库链接为一个可执行文件。
目标代码文件、可执行文件和库
C编程的基本策略是使用程序将源代码文件转换成可执行文件,此文件包涵可以运行的机器语言代码。
1、编译器
将源代码
转换为中间代码
2、链接器
将此中间代码
与其他代码相结合生成可执行文件
注释:中间文件
的形式有很多选择。最一般的选择是将源代码转化为机器语言代码,将结果放置在一个目标代码文件
(或简称目标文件
)
虽然目标文件包涵机器语言代码,但该文件不能运行,它还不是一个完整的程序。
目标代码文件缺少的第一个元素
启动代码(start-up code)
此代码相当于程序与操作系统之间接口,例如DOS和Linux要使用不同的启动代码,因为两种系统处理程序的方式不同。
目标代码文件缺少的第二个元素
库例程序代码
链接器
的作用就是将这3个元素(目标代码
,系统的标准启动代码
和库代码
)结合在一起,并将他们存放在单个文件中。
链接器只从库中提取源代码程序中所使用的函数所需的代码。
C primer plus 有关C编译示意图: