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

C++基础第十一章 宏和预编译.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  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基础第十一章宏和预编译

1-* 第十一章 宏和预编译 课程内容安排 预编译器及其工作方式。 宏的定义和使用。 使用宏时需要注意的问题。 条件编译。 预处理器和编译器 预处理器是专门用来处理预处理指令的程序。在编译器运行之前,会先运行预处理器,查找所有的预处理指令。预处理指令是以“#”开头,且不以“;”结束,以区分一般的语句。预处理器根据预处理指令生成新的源代码文件(临时文件,可以通过编译器的选项输出到指定目录)。 编译器的作用是把源代码转化成汇编语言或机器指令。但是,编译器并不是直接编译程序员生成的源文件,而是经预处理器处理后所产生的新的源文件。 预处理器的任务 简单来讲,预处理器的任务就是执行源代码中的预处理指令,并对源代码进行相应的处理。因此从预处理指令的类型来讲,预处理器的任务包括如下的几个部分。 将其他文件包含到当前文件中; 定义宏,用来取代某些复杂文本; 定义类似函数的宏,以更加灵活的方式控制源代码; 实施条件编译,即有选择的编译源代码的某些部分。 宏的作用 使用预处理指令#define定义的宏主要有三个方面的作用: 替代字面常量; 替代运算符; 声明某个符号已经被定义,通常用于条件编译。 替代字面常量 用宏替代字面常量是宏非常重要的一个功能。其好处是直观、简洁、修改方便。譬如对于圆周率π,其值是一个无理数常量,3.14159……。 如果在程序中每一处要使用圆周率的地方都直接书写这个常量,那么源代码修改起来就不太方便。一旦要求改变数字的精度,减少或增加π的小数位数,则所有使用到的地方都要修改。无疑修改量会比较大,而且容易出错。 带参数的宏 定义带参数宏的语法同定义函数类似,在紧跟在宏名之后有用括号包围起来的参数列表,但没有返回值类型、参数类型等的声明。如下所示: #define 宏名(参数1, 参数2, ……参数n) 可替换文本 如果可替换文本一行写不完,可以分成多行,并在每一行的结尾处加上续行符号“\”,除了最后一行。 C/C++中的宏指令都是在ANSI标准中的。 宏指令 #define #error #include #if #else #elif #endif #ifdef #ifndef #undef #line #pragma 预定义的宏指令为程序提供了条件编译的功能。条件编译可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。C++中的条件编译有三种形式 #ifdef形式 2. #ifndef形式 3. #if形式 利用预定义的宏指令进行条件编译 文件包含命令,就是指宏指令#include。通常有两种形式的包含。第一种是尖括号包含的文件,表示要到系统目录下去寻找被包含的文件。第二种是引号包含的文件,表示在当前工程目录中去寻找被包含的文件。 文件包含命令和包含警卫 小结 本章主要介绍了C++中编译预处理的基本内容,主要包括宏、文件包含和条件编译三部分内容。本章首先讨论预编译器及其工作方式,接着重点宏的概念、作用,以及如何定义和使用宏。最后讲解了C++中的宏指令和预定义宏的内容,以及如何利用预定义宏进行条件编译等内容。学习完本章,读者应对编译器编译C++源程序的过程有一定理解。 习题 【题目155】从下面的选项中选出正确的答案,在宏定义#define MAX 100中,宏名MAX代替的是? A.实型数 B.整型数 C.常量 D.一串字符 【分析】该试题主要考查宏定义的相关概念。在宏替换中,不管宏名是什么标识符,其替代的都是一个常量,这个常量也不会区分浮点型、整型或字符型等数据类型,而是在具体的程序引用中进行区分。因此,该试题中宏名MAX代替的是一个常量。 【题目156】编写一个标准宏MIN,这个宏输入两个参数并返回较小的一个,注意参数在调用时可能是表达式的情况。 【分析】该试题主要考查宏定义的定义和使用。宏定义可以实现类似于函数的功能,但是它终归不是函数,而宏定义中括弧中的“参数”也不是真的参数,在宏展开的时候对“参数”进行的是一对一的替换。读者需要谨慎地将宏定义中的“参数”和整个宏用用括弧括起来,所以严格地讲下述解答都是错误的: #define MIN(A,B) (A) = (B) ? (A) : (B) #define MIN(A,B) (A = B ? A : B ) 正确的写法应如下所示: #define MIN(A,B) ((A) = (B) ? (A) : (B)) 【题目157】编写一个C++程序,在程序中定义一个不带参数的宏PI,使其完成求给定半径的圆的周长和面积。 【分析】该试题主要考查宏在具体程序中的应用。根据前面章节的学习,读者知道求给定圆半径的周长和面积可以通过声明变量和

文档评论(0)

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

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

1亿VIP精品文档

相关文档