C、C++语言语言编译过程总结详解.pdfVIP

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 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)

cai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档