- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
宏定义有无参数宏定义和带参数宏定义两种。
无参数的宏定义的一般形式为
#define标识符字符序列
其中#define之后的标识符称为宏定义名(简称宏名),要求宏名与字符序列之间用空格符分隔。
这种宏定义要求编译预处理程序将源程序中随后所有的定名的出现(注释与字符串常量中的
除外)均用字符序列替换之。前面经常使用的定义符号常量是宏定义的最简单应用。如有:
#defineTRUE1
#defineFALSE0
则在定义它们的源程序文件中,凡定义之后出现的单词TRUE将用1替代之;出现单词FALSE
将用0替代之。
在宏定义的#之前可以有若干个空格、制表符,但不允许有其它字符。宏定义在源程
序中单独另起一行,换行符是宏定义的结束标志。如果一个宏定义太长,一行不够时,可采
用续行的方法。续行是在键人回车符之前先键入符号\。注意回车要紧接在符号\之后,
中间不能插入其它符号。
宏定义的有效范围称为宏定义名的辖域,辖域从宏定义的定义结束处开始到其所在的
源程序文件末尾。宏定义名的辖域不受分程序结构的影响。可以用预处理命令#undef终止宏
定义名的辖域。
在新的宏定义中,可以使用前面已定义的宏名。例如,
#defineR2.5
#definePI3.1415926
#defineCircle2*PI*R
#defineAreaPI*R*R
程序中的Circle被展开为2*3.1415926*2.5,Area被展开为3.1415926*2.5*2.5。
如有必要,宏名可被重复定义。被重复定义后,宏名原先的意义被新意义所代替。
通常,无参数的宏定义多用于定义常量。程序中统一用宏名表示常量值,便于程序前
后统一,不易出错,也便于修改,能提高程序的可读性和可移植性。特别是给数组元素个数
一个宏定义,并用宏名定义数组元素个数能部分弥补数组元素个数固定的不足。
注意:预处理程序在处理宏定义时,只作字符序列的替换工作,不作任何语法的检查。
如果宏定义不当,错误要到预处理之后的编译阶段才能发现。宏定义以换行结束,不需要分
号等符号作分隔符。如有以下定定义:
#definePI3.1415926;
原希望用PI求圆的周长的语句
c=2*PI*r;
经宏展开后,变成
c=2*3.1415926*r;
这就不能达到希望的要求。
带参数宏定义进一步扩充了无参数宏定义的能力,在字符序列替换同时还能进行参数替
换。带参数定定义的一般形式为
#define标识符(参数表)字符序
其中参数表中的参数之间用逗号分隔,字符序列中应包含参数表中的参数。在定义带参数的
宏时,宏名标识符与左圆括号之间不允许有空白符,应紧接在一起,否则变成了无参数的宏
定义。如有宏定义:
#defineMAX(A,B)((A)(B)?(A):(B))
则代码=MAX(p+q,u+v)将被替换成=((p+q)(u+v)?(p+q):(u+v)。
程序中的宏调用是这样被替换展开的,分别用宏调用中的实在参数字符序(如
p+q和u+V)替换宏定义字符序列中对应所有出现的形式参数(如用p+q替代所有形式参
数A,用u+V替代所有形式参数B),而宏定义字符序列中的不是形式参数的其它字符则
保留。这样形成的字符序列,即为宏调用的展开替换结果。宏调用提供的实在参数个数必须
与宏定义中的形式参数个数相同。
注意:宏调用与函数调用的区别。函数调用在程序运行时实行,而宏展开是在编译
的预处理阶段进行;函数调用占用程序运行时间,宏调用只占编译时间;函数调用对实参
有类型要求,而宏调用实在参数与宏定义形式参数之间没有类型的概念,只有字符序列的对
应关系。函数调用可返回一个值,宏调用获得希望的C代码。另外,函数调用时,实参表
达式分别独立求值在前,执行函数体在后。宏调用是实在参数字符序列替换形式参数。替换
后,实在参数字符序列就与相邻的字符自然连接,实在参数的独立性就不一定依旧存在。
如下面的宏定义:
#defineSQR(x)x*x
希望实现表达式的平方计算。对于宏调用
P=SQR(y)
能得到希望的宏展开p=y
您可能关注的文档
最近下载
- 吉尔认知负荷模式下浅谈听力与口译.doc VIP
- 湖南省新高考教学教研(长郡二十校)联盟2025届高三上学期第一次预热演练英语试题(含答案).docx VIP
- 2023年温州医科大学公共课《C语言》科目期末试卷B(有答案).docx VIP
- 2025年长沙民政职业技术学院单招职业适应性测试题库及参考答案1套.docx VIP
- 钢笔楷书字帖-偏旁部首.pdf VIP
- 人教版九年级物理全一册期末复习知识点(填空版).pdf VIP
- 湖南省新高考教学教研(长郡二十校)联盟2024-2025学年高三上学期第一次预热演练物理试卷(含答案).pdf VIP
- 2024《施工组织设计研究的国内外文献综述》3300字.docx VIP
- 名著阅读《小英雄雨来》 导读课课件.pptx VIP
- 厦门大学进化生物学第12章生态系统的进化.ppt VIP
专注于文案的个性定制,修改,润色等。本人已有16年相关工作经验,具有扎实的文案功底,可承接演讲稿,读后感,任务计划书,营销方案等方面的工作。欢迎您的咨询~~
文档评论(0)