C语言程序设计任文孔庆彦第7章节第12章节第8章节.pptVIP

C语言程序设计任文孔庆彦第7章节第12章节第8章节.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 编译预处理 概 述(1) 以“#”号开头的命令,被称为“编译预处理”命令。C语言中编译预处理主要包括宏定义、文件包含、条件编译等。 所谓预处理,是指在进行编译的第一遍扫描(即词法扫描和语法分析)之前所要做的工作,它由预处理程序完成。当我们对源文件进行编译时,系统首先自动启用预处理程序,对源程序中的预处理部分进行处理,然后才对源程序进行编译。由此可见,预处理命令不是实现程序的功能,而是给C语言编译系统提供信息,通知C编译器在对源程序进行编译之前应该做哪些预处理工作。 预处理命令是由ANSI C统一规定的,但它并不是C语言本身的组成部分,更不是C语言的语句,为了与其他C语句相区别,所有的预处理命令都以符号“#”开头,书写时单独占一行,且末尾不加分号。在源程序中,预处理命令通常放在函数之外的源文件起始部分。 概 述(2) 预编译功能是C语言特有的,合理地使用预处理命令,不但可以提高编程的效率和程序的可读性,而且便于修改、移植和调试程序,增加程序的灵活性,有助于实现结构化程序设计。本章主要介绍宏定义与引用、包含文件处理、条件编译命令。 8.1 宏定义 在C语言源程序中允许用一个标识符来表示一个字符串,称为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。 为了区别于一般的变量名、数组名、指针变量名,宏名通常用大写字母表示。 宏定义是由源程序中的宏定义命令完成的,宏代换是由预处理程序自动完成的。在C语言中,“宏”分为无参宏和带参宏两种。 8.1.1 无参宏的定义和引用 8.1.2 带参宏的定义和引用 8.1.3 带参宏与函数的区别 8.1.1无参宏的定义和引用(1) 无参宏的宏名后不带参数。其定义的一般形式为: #define 标识符 字符串 其中: “#”表示这是一条预处理命令。凡是以“#”开头的均为预处理命令。 “define”为宏定义命令。“标识符”为所定义的宏名。“字符串”可以是常数、表达式、格式串等。 当定义了宏名后,在源程序中就可以引用这个宏名了。源程序开始编译前,编译预处理程序将会把源程序清单中所有引用的宏名替换成对应的字符串,然后再编译源程序。例如: #define PI 3.14159 #define R 10.0 #define S PI*R*R … float x=S; 预编译后,语句“float x=S;”将被展开替换为: float x=3.14159*10.0*10.0; 不难看出,变量x中存放的是半径为10.0的圆的面积。 8.1.1无参宏的定义和引用(2) 说明: 宏名通常用大写字母表示,且其前后应有空格,以便准确地辨认宏名。 本命令不是语句,其后不能有分号(;)。如果有分号则连分号也一起替换。宏替换只是简单的字符替换,并不进行任何语法检查。如有错误,只能在编译已被宏展开后的源程序时才能被发现。如将上面的“#define PI 3.14159”改为“#define PI 3.14159;”,则语句“float x=S;”将被展开替换为:float x=3.14159;*10.0*10.0;编译时将出现语法错误。 在字符串中若出现运算符,要注意替换后的结果,通常需在合适的位置加括号。例如:将上面的“#define R 10.0”改为“#define R 5.0+5.0”时,语句“float x=S;”将被展开替换为: float x=3.14159*5.0+5.0*5.0+5.0;显然运算结果不符合原意。 若将宏定义改为:“#define R (5.0+5.0)”, 语句“float x=S;”将被展开替换为: float x=3.14159*(5.0+5.0)*(5.0+5.0);这样运算结果才是正确的。 宏定义也有作用域,它的作用域是从开始定义处到本程序的末尾。所以一般都将宏定义放在源程序开头。如果要中止其作用域,可使用“#undef”命令取消宏定义,格式如下: #undef 标识符 8.1.1无参宏的定义和引用(3) 8.1.1无参宏的定义和引用(4) 对出现在源程序字符串中的宏名,预处理时不对其作宏替换操作。例如: #define PI 3.14159 float r=10.0; … Printf(S=PI*r*r=%f\n,PI*r*r); 输出结果是:S=PI*r*r=314.159,而不是s=3.14159*r*r=314.159。 使用宏定义,可以简化程序的调试,提高程序的通用性。 8.1.1无参宏的定义和引用(5) 在宏定义的字符串中可以出现已经定义过的另一

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档