网站大量收购闲置独家精品文档,联系QQ:2885784924

程序组织与编译预处理.pdf

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 13 章程序组织与编译预处理 第13章 程序组织与编译预处理 13.1 简介 严格地说,预处理命令(Preprocessing Directives )并非 C 语言语法的组成部分,它只 是对代码书写的一种约定和简化的表示方式。由于绝大多数 C 语言编译器都支持预处理功 能,所以 C 标准也对预处理功能做了明确的定义和统一的规定。 编译预处理,顾名思义,是在编译之前对源代码进行的处理工作。这些处理工作在源代 码中按照约定被写成预处理命令。 含有预处理命令的文本文件,即所谓源文件(Source Files ),也叫做预处理文件 (Preprocessing Files ),需要经过预处理程序“加工”“处理”之后才能形成编译器可以编译 的不含预处理命令的翻译单元(Translation Unit )。 C 语言源程序可以由多个源文件组成。在一定条件下,部分源文件可以形成独立的预处 理翻译单元(Preprocessing Translation Unit )单独进行预处理,单独编译。 从概念上来说,预处理与编译是两个独立的、一先一后进行的翻译源程序的过程,但在 许多开发环境中,并不特别地区分它们,以至于很难察觉预处理过程的存在。 源代码 编译器 预处理器 图13-1 预处理在编译前完成 预处理器对源代码所做的“加工”无非是一些“替换”、“添加”、“拼接”、“删除”之类 的工作。在代码使用预处理命令的目的是提高编程的效率、增强代码的可读性、可维护性、 可移植性、改善代码的结构、便于调试及有条理地管理源程序代码。 13.1.1 一般特点 每条预处理命令逻辑上都占一行。预处理命令都以“# ”开头。老式的 C 要求“# ”在 第一列,但现代的 C 语言预处理器容许“# ”所在行前面或后面有空白字符。 预处理不是一次性完成的,而是分为几个阶段逐步完成的。理解在预处理阶段预处理器 第 13 章程序组织与编译预处理 工作的过程,可以对初始的源代码究竟被加工处理成了什么样子有清楚的认识。 13.1.2 预处理的几个阶段 1. 首先进行的处理是把源文件中的不规范的字符替换为标准的 C 语言源字符。 比如,有的IDE 可能使用特殊的字符表示文本中的换行符,这些将被替换为标 准的源字符。 2. 删除换行字符 比如下面的代码 int ab\ c ; 将被改为 int abc ; 再比如 #define ABC 1234\ 567 将被改写为 #define ABC 1234567 进行这样的处理,是因为预处理命令都是以行为单位的,只有先处理了这个问 题,预处理器才能更容易地识别出各条预处理命令。 3. 识别预处理单词1 (Preprocessing Tokens )并把注释部分替换为空格。 4. 开始执行预处理命令,进行宏展开,执行_Pragma (C99 )运算,如果遇到#include 预处理命令,则把相应的源文件包含进来,并对源文件反复做以上 1~4 步的预 处理,直到源文件中没有预处理命令。 5. 把字符常量或字符串字面量中的转义序列替换为对应的字符。 6. 连接相邻的字符串字面量。比如把代码中的“ ABC

文档评论(0)

ygxt89 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档