建设信用交通网站 省,网站的建设参考文献,全屏类网站,做网站推销手表环境在ANSI的任何一种实现中#xff0c;存在两种不同的环境。翻译环境#xff1a;在这个环境里#xff0c;源代码被转换为可执行的机器指令。执行环境#xff1a;用于实际执行代码。翻译环境组成一个程序的每个源文件通过编译过程分别转成目标代码各个目标文件由链接器捆绑… 环境在ANSI的任何一种实现中存在两种不同的环境。翻译环境在这个环境里源代码被转换为可执行的机器指令。执行环境用于实际执行代码。翻译环境组成一个程序的每个源文件通过编译过程分别转成目标代码各个目标文件由链接器捆绑在一起形成一个单一而完整的可执行程序。链接器同时也会引入标准c函数库中的任何被改程序所用到的函数。过程如下图所示实际上翻译环境本身也有几个阶段组成编译预编译阶段在这个阶段主要进行一些文本操作如处理预处理指令删除注释#define宏替换条件编译。我们可以在linux平台下测试一下在这个阶段会产生一个.i文件。首先写一个简单的程序比如hello world保存为test.c文件。使用如下代码gcc -E test.c -o test.i此时会出现一个test.i文件vim打开可以观察到里面的代码已经不再是原来的hello world了这一步会将#include包含的文件全部复制过来。编译阶段主要对代码进行解析分析出语法错误词法错误并且符号汇总。这一阶段完成后会形成.s文件并且将c代码转成汇编语言。使用如下代码gcc -S test.i -o test.s打开可以观察到都是汇编代码。汇编阶段在这一阶段会形成符号表。并且将汇编代码转换成机器指令二进制序列。使用如下代码gcc -c test.s -o test.o打开可以看到全部都是一些我们看不懂的东西其实就是二进制序列。链接链接这一阶段主要是合并段表合并符号表和对符号表的重定位。编译阶段结束后会生成一个a.out的文件这个就是我们说的可执行程序中间产生的.i .s .o文件会被自动删除可使用代码保留。./a.out此时可以看到屏幕上已经打印了hello world了。执行环境首先程序必须载入内存这个任务由操作系统完成。在独立环境中必须手工安排比如通过把可执行代码置入只读内存ROM来完成。接着调用main函数。执行程序代码程序将使用一个运行时堆栈用于存储函数的局部变量和返回地址程序同时也可以使用静态内存存储于静态内存中的变量在整个执行过程中将一直保留他们的值。终止程序。可以是正常终止也可能是出现错误自行中断。来源于网络如有侵权告知必删。