一、不同的环境
1、翻译环境
英文全称:translation environment。源代码在翻译环境中转换成可执行的机器指令。
2、执行环境
英文全称:execution environment。用于执行实际代码。
3、独立环境
英文全称:freestanding environment。指的是不存在操作系统的环境,例如嵌入式操作系统。
翻译和执行两种环境不必位于同一台机器上,比如:交叉编译器(cross compiler),操作系统环境等等。
二、程序的翻译和执行
1、翻译的阶段主要包括预处理、编译、汇编和链接
首先:预处理阶段,预处理器(preprocessor)在源代码上执行一些文本操作,比如:用实际的值代替#define指定的符号,读入由#include指令包含的头文件内容。
其次:编译阶段,进行词法和语法的解析,判断源代码的语义,对语法进行报错和警告,最后生成汇编文件。
之后:汇编阶段,将得到的汇编文件转换成可执行机器指令。
最后:链接阶段,将其他预编译好的函数库链接到程序中,得到最终的可执行程序。
补充:编译程序时可以加入优化器(optimizer),优化代码,使其效率更高,但需要额外的时间,所以一般在程序调试完毕之后使用。
2、执行阶段
在宿主环境中(含操作系统):操作系统将程序载入内存(ROM),初始化静态存储区域的变量,系统调用启动程序,再调用main函数,程序执行。
在独立环境中(不含操作系统):将程序手动载入内存,系统通过启动程序调用main函数,执行程序。
三、转译字符
\a:警告字符,作用是奏响终端铃声,或产生其他一些可见信号。
\b:退格键
\f:进纸字符
\n:换行字符
\f:回车字符
\t:水平制表符
\v:垂直制表符
\ddd:ddd表示三个八进制数,转译字符表示八进制数值(转换成十进制查询)所代表的字符
\xddd:ddd表示十六进制,也表示字符
四、问题补充
将一个大型程序放到单一的源文件中的优缺点:
优点:链接方便;
缺点:编译器可能容纳不下代码,代码的可重用性差,维护麻烦,修改单个函数需要重新编译整个函数。