C语言中的翻译和执行

在ANSI C的任何一种实现中,存在两种不同的环境。

第1种是翻译环境(translation environment),在这个环境里,源代码被转换为可执行的机器指令。

第2种是执行环境(execution environment),它用于实际执行代码。

标准明确说明,这两种环境不必位于同一台机器上。例如,交叉编译器(cross-compiler)就是在一台机器上运行,但它所产生的可执行代码运行于不同类型的机器上。操作系统也是如此。标准同时讨论了独立环境(freestanding environment),就是不存在操作系统的环境。你可能在嵌入式系统中(如微波炉控制器)遇到这种类型的环境。

1. 翻译

翻译阶段由几个步骤组成,组成一个程序的每个(有可能有多个)源文件通过编译过程分别转换为目标代码(object code)。然后,各个目标文件由链接器(linker) 捆绑在一起,形成个单一而完整的可执行程序。链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它也可以搜索程序员个人的程序库,将其中需要使用的函数也链接到程序中。

1.1 编译

编译过程本身也由几个阶段组成,首先是预处理器(preprocessor)处理。在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由#define指令定义的符号以及读入由#include指令包含的文件的内容。

然后,源代码经过解析(parse),判断它的语句的意思。第2个阶段是产生绝大多数错误和警告信息的地方。

你可能感兴趣的:(C,c语言)