在ANSI C的任何一种实现中,存在两种不同的环境:
一、翻译环境,在这个环境里,源代码被转换为可执行的机器指令;
二、执行环境,它用于实际执行代码。
翻译阶段由几个部分组成:
一、组成程序的每个(有可能有多个)源文件通过编译过程分别转换为目标代码(object code)。
二、各个目标文件由连接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。
编译过程又由几个阶段组成:
一、预处理器(preprocessor)处理,在这个阶段,预处理器在源代码上执行一些文本操作。例如,用实际值代替由 #define 指令定义的符号以及读入由 #include 指令包含的文件的内容。
二、源代码经过解析(parse),判断它的语句的意思,这个阶段是产生绝大多数错误和警告信息的地方,随后便产生目标代码。
编译过程流程图如下:
执行阶段由几个部分组成:
一、程序必须载入到内存中。在宿主环境中(也就是具有操作系统的环境),这个任务由操作系统完成。那些不是存储在堆栈中的尚未初始化的变量将在这个时候得到初始值。
二、程序执行。在宿主环境中,通常一个小型的启动程序与程序链接在一起。它负责处理一系列日常事务,如收集命令行参数以便程序能够访问它们。接着调用main函数,执行程序。
三、程序执行的最后一个阶段就是程序的终止。它可以由多种不同的原因引起。“正常”终止就是main函数返回。也有可能是由用户按下break键或者电话连接的挂起而终止,也有可能在执行过程中出现错误而自行中断。
版权声明:本文为博主原创文章,未经博主允许不得转载。
时间: 2024-11-10 14:16:31