不带参数的宏定义的格式如下:
#define 标识符替换列表
标识符也称之为“宏名”。替换列表是一系列的C语言记号,包括标识符、关键字、数、字符常量、运算符和标点符号。当预处理器遇到一个宏定义时,会做一个“标识符”代表“替换列表”的记录。在文件后面的内容中,不管标识符出现在什么位置,预处理器都会用替换列表代替它。
【例10-1】
例10-1 运行视频
程序在编译之前,首先处理宏定义(即进行宏替换),将C语句“area=PI*r*r;”中出现的宏标识符PI替换为3.141 592 6,即将这条语句处理成“area=3.1415926*r*r;”后再进行程序代码的编译工作。
关于宏定义的使用,还应该注意以下几点。
(1)宏定义时,表示宏名的标识符用大小写字符都可以,但最好采用大写字母,这样可以有效地与变量名相区别。
(2)不要在宏定义中放置任何额外的符号,否则它们会被作为替换列表的一部分。一种常见的错误是在宏定义中使用“=”号。例如:
在宏定义的末尾使用分号结尾也是另一个常见错误。例如:
(3)字符串常量中出现的宏标识符不能进行替换。例如:(www.xing528.com)
则替换后的语句为:
(4)宏定义的作用域是从其定义位置起到所在源程序文件结束为止,也可以使用#undef或者不带替换列表的宏定义结束其作用域。例如,可以使用#undef PI或#define PI预处理命令结束“#define PI 3.1415926”宏定义的作用域。
(5)宏定义可以嵌套定义,即在定义一个宏定义时,可以直接引用前面定义好的宏名,但在调用时仅仅进行原样的替换操作,并不会进行其他处理。
【例10-2】
例10-2 运行视频
对于上述程序,一种错误的理解方式是,M替换成3,N替换成5,S则替换成15,最后的输出结果为x=15。此时犯下了在宏替换过程中进行计算的错误,正确的应该是,M替换成3,N替换成3+2,S则替换成3*3+2,所以程序执行的正确结果是x=11。此例中如果想使结果输出x=15,则在宏定义中将“#define N M+2”修改为“#defin N(M+2)”即可。
(6)使用宏定义可以对程序的调试提供帮助。
【例10-3】保存从键盘输入的100个整型数据,并求出所有数据之和。
例10-3 运行视频
如果程序直接定义长度为100的数组,那每次调试程序就需要输入100个数据,这样增加了调试的工作量。通过定义#define N 5,例10-3中的程序在调试时仅需要输入5个数据即可。当程序调试成功后,只需要将宏定义语句改为“#define N 100”,然后编译即可。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。