第十一章宏和预编译.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第十一章宏和预编译.ppt

C/C++中的宏指令都是在ANSI标准中的。 预定义的宏指令为程序提供了条件编译的功能。条件编译可以按不同的条件去编译不同的程序部分,因而产生不同的目标代码文件。这对于程序的移植和调试是很有用的。C++中的条件编译有三种形式 #ifdef形式 2. #ifndef形式 3. #if形式 小结 本章主要介绍了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,使其完成求给定半径的圆的周长和面积。 【分析】该试题主要考查宏在具体程序中的应用。根据前面章节的学习,读者知道求给定圆半径的周长和面积可以通过声明变量和常量来实现,其中由于PI是不会变的,其值为3.14,因此可以将其声明为常量。在学习了宏后,可以将该常量声明为宏,其他语句不变。 【题目158】什么是预编译,何时需要预编译? 【分析】预编译就是指程序执行前的一些预处理工作,其主要指用#来表示的一系列表达式。使用预编译主要针对: a.总是使用不经常改动的大型代码体。 b.程序由多个模块组成,所有模块都使用一组标准的包含文件和相同的编译选项。在这种情况下,可以将所有包含文件预编译为一个预编译头。 【题目159】定义一个带参数的宏swap,使其完成两个整数的交换功能。 【分析】该试题主要考查带参数宏的定义和使用。试题要求宏完成两个整数的交换功能,根据前面学习的内容,读者知道不适用第三方变量可以实现两个值的交换,即通过两个变量的复合赋值运算来实现,此处同样可以通过定义该赋值运算从而完成宏swap的实现。 【题目160】宏可以带参数,而且带参数的宏与带参数的函数的写法和调用都很相似,但是其存在本质上的不同,其区别在何处,请试着通过两个例子进行说明。 【分析】该试题主要考查函数和宏的区别。函数调用时要把实参表达式的值求出来再赋予形参,而宏代换中对实参表达式不作计算直接地代换。这导致了即使把同一表达式用函数处理与用宏处理,两者的结果有可能是不同的。下面通过具体例子进行说明,如下分别定义了一个带参宏和带参函数,其函数名为SQ,形参为Y,函数体表达式为((y)*(y)),而宏定义也定义字符串为((y)*(y))。 【题目161】用预处理指令#define 声明一个常数,用以表明1年中有多少秒(忽略闰年问题) 【分析】该试题主要考查#define指令。读者需明确#define 语法的基本知识,懂得预处理器计算常数表达式的值,因此直接写出是如何计算一年中有多少秒而不是计算出实际的值。此外,读者需意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是长整型数。在表达式中用到UL(表示无符号长整型),因此,该问题的答案如下 #define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL 【题目162】下列叙述正确的是:( )。 A.一个程序中可以有多个#include命令行 B.#include命令行中,用双引号和用尖括号将被包含的文件名括起来没有区别 C.#include命令行只能放在程序开始位置 D.#include命令后也必须以分号结束 【分析】该试题主要考查#in

文档评论(0)

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

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

1亿VIP精品文档

相关文档