第 2 章 基本概念

1.环境
在ANSI C的任何一种实现中,存在两种不同的环境。第1中时候翻译环境,在这个环境里,源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。标准明确说明,这两种环境不必须位于同一台机器上。例如,交叉编译器就是在一台机器上运行,但它所产生的可执行代码运行于不同类型的机器上。操作系统也是如此。标准同时讨论了独立环境,就是不存在操作系统的环境。你可能在嵌入式系统中遇到这种类型的环境。
1.1翻译
翻译阶段由几个步骤组成,组成一个程序的每个(有可能有多个)源文件通过编译过程分别转换为目标代码。然后,各个目标文件由链接器捆绑在一起,形成一个单一而完整地可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它也可以搜索程序员个人的程序库,将其中需要试用地函数也链接到程序中。图2.1描述了这个过程。
编译过程本身也由几个阶段组成,首先是预处理器处理。在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替#define指令定义的符号以及读入由#include指令包含的文件的内容。
然后,源代码经过解析,判断它的语句的意思。第2个阶段是产生绝大多数错误和警告信息的地方。随后,便产生目标代码。目标代码是机器指令的初步形式,用于实现程序的语句。如果我们在编译程序的命令行中加入了要求进行优化的选项,优化器就会对目标代码进一步进行处理,使它效率更高。优化过程需要额外的时间,所以在程序调试完毕并准备生成正式产品之前一般不进行这个过程。至于目标代码是直接产生的,还是先以汇编语言语句的形式存在,然后再经过一个独立的阶段编译成目标文件,对我们来说并不重要。


图片1.png

文件名约定
由#include指令包含到C源代码的文件被称为头文件,通常具有扩展名.h。
1.1.1编译和链接
在绝大多数UNIX系统中,C编译器被称为cc,它可以用多种不同的方法来调用。
(1)编译并链接一个完全包含于一个源文件的C程序
(2)编译并链接几个C源文件
(3)编译一个C源文件,并把它和现存的目标文件链接在一起
(4)编译单个C源文件,并产生一个目标文件,以后再进行链接
(5)编译几个C源文件,并为每个文件产生一个目标文件
(6)链接几个目标文件
1.2执行

你可能感兴趣的:(第 2 章 基本概念)