- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C、C++语言语言编译过程总结详解.pdf
C 语言编译过程总结详解
从图上可以看到,整个代码的编译过程分为编译和链接两个过
程,编译对应图中的大括号括起的部分,其余则为链接过程。
编译过程
编译过程又可以分成两个阶段:编译和会汇编。
编译
编译是读取源程序(字符流),对之进行词法和语法的分析,将
高级语言指令转换为功能等效的汇编代码,源文件的编译过程包含两
1
个主要阶段:
第一个阶段是预处理阶段,在正式的编译阶段之前进行。预处理
阶段将根据已放置在文件中的预处理指令来修改源文件的内容。如
#include 指令就是一个预处理指令,它把头文件的内容添加到.cpp 文
件中。这个在编译之前修改源文件的方式提供了很大的灵活性,以适
应不同的计算机和操作系统环境的限制。一个环境需要的代码跟另一
个环境所需的代码可能有所不同,因为可用的硬件或操作系统是不同
的。在许多情况下,可以把用于不同环境的代码放在同一个文件中,
再在预处理阶段修改代码,使之适应当前的环境。
主要是以下几方面的处理:
(1)宏定义指令,如 #define a b
对于这种伪指令,预编译所要做的是将程序中的所有 a 用b 替换,
但作为字符串常量的 a 则不被替换。还有 #undef ,则将取消对某个
宏的定义,使以后该串的出现不再被替换。
(2 )条件编译指令,如#ifdef,#ifndef,#else,#elif,#endif
等。
这些伪指令的引入使得程序员可以通过定义不同的宏来决定编
译程序对哪些代码进行处理。预编译程序将根据有关的文件,将那些
不必要的代码过滤掉。
2
(3 )头文件包含指令,如#include FileName或者#include
FileName等。
在头文件中一般用伪指令#define 定义了大量的宏(最常见的是
字符常量),同时包含有各种外部符号的声明。采用头文件的目的主
要是为了使某些定义可以供多个不同的 C 源程序使用。因为在需要
用到这些定义的 C 源程序中,只需加上一条#include 语句即可,而不
必再在此文件中将这些定义重复一遍。预编译程序将把头文件中的定
义统统都加入到它所产生的输出文件中,以供编译程序对之进行处
理。包含到 c 源程序中的头文件可以是系统提供的,这些头文件一般
被放在 /usr/include 目录下。在程序中#include 它们要使用尖括号(
)。另外开发人员也可以定义自己的头文件,这些文件一般与c 源程
序放在同一目录下,此时在#include 中要用双引号()。
(4 )特殊符号,预编译程序可以识别一些特殊的符号。
例如在源程序中出现的 LINE 标识将被解释为当前行号(十进制
数),FILE 则被解释为当前被编译的 C 源程序的名称。预编译程序对
于在源程序中出现的这些串将用合适的值进行替换。
预编译程序所完成的基本上是对源程序的“替代”工作。经过此
种替代,生成一个没有宏定义、没有条件编译指令、没有特殊符号的
输出文件。这个文件的含义同没有经过预处理的源文件是相同的,但
内容有所不同。下一步,此输出文件将作为编译程序的输出而被翻译
成为机器指令。
3
第二个阶段编译、优化阶段,经过预编译得到的输出文件中,只
有常量;如数字、字符串、变量的定义,以及 C 语言的关键字,如
main,if,else,for,while,{,}, +,-,*,\等等。
编译程序所要作得工作就是通过词法分析和语法分析,在确认所
有的指令都符合语法规则之后,将其翻译成等价的中间代码表示或汇
编代码。
优化处理是编译系统中一项比较艰深的技术。它涉及到的问题不
仅同编译技术本身有关,而且同机器的硬件环境也有很大的关系。优
化一部分是对中间代码的优化。这种优化不依赖于具体的计算机。另
一种优化则主要针对目标代码的生成而进行的。
对于前一种优化,主要的工作是删除公共表达式、循环优化(代
码外提、强度削弱、变换循环控制条件、已知量的合并等)、复写传
播,以及无用赋值的
文档评论(0)