- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
11.1 宏定义 在C语言源程序中允许用一个标识符来表示一个字符串,称之为“宏”。被定义为“宏”的标识符称为“宏名”。在编译预处理时,对程序中所有出现的“宏名”,都用宏定义中的字符串去代换,这称为“宏代换”或“宏展开”。宏定义是由源程序中的宏定义命令完成的。宏代换是由预处理程序自动完成的。 “宏”并不是一个陌生的概念,在前面使用的符号常量就是宏。宏最简单的情况是用一个标识符代表一个数值,这属于不带参数的宏。在使用中,宏还有一种复杂的形式,可以使用参数,即带参数的宏。 11.1.1不带参数的宏定义 不带参数宏定义的一般形式为 #define 宏标识符 宏标识符代表的特定的字符串其中:“#”表示这是一条预处理命令;“define”为宏定义命令;“标识符”为所定义的宏名;“字符串”可以是常数、表达式、格式串等。在这种宏定义里宏名后不带参数。 在前面的章节中所使用的符号常量定义方法其实就是一种不带参数的宏定义。例如: #definePI3 这里定义了一个名为PI的宏,其代表的字符串为3作为一种编码规范,习惯用大写字母来表示标识符,以区别于一般变量标识符。 此外,采用不带参数的宏定义形式还可以对程序中反复使用的表达式进行定义。例如: #defineD(b*b-4*a*c) 表示程序中所有的表达式(b*b-4*a*c)都可由D代替。在编译源程序时,先进行宏替换,即用表达式(b*b-4*a*c)去替换所有的宏名D,然后再进行编译。 不带参数的宏定义形式可以代表一个字符串常量。例如: #define VERSIONVersion 1.0 Copyright(c) 2012 这里定义了一个名为VERSION的宏,代表了字符串Version 1.0 Copyright(c) 2012。 【例11.1】 无参数宏定义代表字符串和数值变量。 程序如下: #defineNUMBER16 #defineMSG“We love c language.” #defineFMT“ number is %d\n” main( ) { int number= NUMBER; printf(FMT,number); printf(%s\n,MSG); } 程序运行结果: number is 16 We love c language. 编译预处理情况:函数体中的NUMBER被数值16替换,MSG被字符串?“We love c language.”?替换,FMT被字符串?“number is %d\n”?替换。预处理后的程序如下: main( ) { int number=16; printf(“number is %d\n”,number); printf(“%s\n”,“ We love c language.”); } 11.1.2带参数的宏定义 在C语言中,宏定义也可以带参数,其定义形式为 #define 宏标识符(形参表)字符串 这里要求形参表中的参数要在字符串中出现,调用的一般形式为 宏名(实参表) 宏定义中的参数为形参,宏调用中的参数为实参。例如: #defineSQUARE(a)a*a 若程序中有以下语句: m= SQUARE (2.5); 在宏调用时,用实参2.5代替形参a,经预处理宏替换后的语句为 m=2.5*2.5 在编程过程中,经常用到如下的一些带参数的宏定义: #define MAX(a,b) (((a) (b)) ? (a) : (b)) #define MIN(a,b) (((a) (b)) ? (a) : (b)) #define ABS(x) (((x) 0) ? (x) : (-(x))) #define STREQ(s1,s2) (strcmp ((s1),(s2)) = = 0) #define STRGT(s1,s2) (strcmp ((s1),(s2)) 0) 【例11.2】 使用带参数宏定义求两个数中的最大值。 程序如下: #include stdio.h #define MAX(x,y) ((x y) ? x : y) /*带参数的宏定义*/ void main( ) { int a,b ; a=6; b=9; printf(“Max number is”,MAX(a,b)); /*调用带参数的宏*/ } 程序运行结果: Max number is 9 在
您可能关注的文档
- C及C++程序设计 第3版 张富 第12章-C语言的预处理器.ppt
- C及C++程序设计 第3版 张富 第13章-磁盘文件操作(IO系统).ppt
- C及C++程序设计 第3版 张富 第15章-类.ppt
- C及C++程序设计 第3版 张富 第16章-类的工具.ppt
- C及C++程序设计 第3版 张富 第17章-类的继承.ppt
- C及C++程序设计 修订本 作者 张富 C语言基础 第3章.ppt
- C及C++程序设计 修订本 作者 张富 C语言基础 第4章.ppt
- C及C++程序设计 修订本 作者 张富 C语言基础 第7章.ppt
- C及C++程序设计 修订本 作者 张富 C语言基础 第9章.ppt
- C及C++程序设计 修订本 作者 张富 C语言基础 第19章.ppt
最近下载
- 智能科学技术导论-周昌乐-第02讲 机器系统.docx VIP
- 空间向量基本定理习题(含答案).doc VIP
- 天津执业药师继续教育《药店动态质量管理知识(二)》习题答案.docx VIP
- 全国公立医院运营管理业财融合30个典型案例汇编.pdf VIP
- 2024秋新人教版数学1年级上册教学课件 第1单元 5以内数的认识和加减法 整理和复习.pptx VIP
- 20250910 某大型制造集团“十五五”产业数字化转型规划方案-151页PPT.pptx VIP
- 人教版一年级上册数学0的认识和加、减法(课件).pptx VIP
- 消防安全手抄报电子小报模板共2套(可编辑可打印).docx VIP
- 智能体技术和应用研究报告(2025年).pdf VIP
- 消防安全word小报手抄报模板.doc VIP
文档评论(0)