首页 理论教育 C语言程序设计教程:不带参数的宏

C语言程序设计教程:不带参数的宏

时间:2023-10-23 理论教育 版权反馈
【摘要】:不带参数的宏定义的格式如下:#define标识符替换列表标识符也称之为“宏名”。例10-1运行视频程序在编译之前,首先处理宏定义,将C语句“area=PI*r*r;”中出现的宏标识符PI替换为3.141 592 6,即将这条语句处理成“area=3.1415926*r*r;”后再进行程序代码的编译工作。一种常见的错误是在宏定义中使用“=”号。例10-2运行视频对于上述程序,一种错误的理解方式是,M替换成3,N替换成5,S则替换成15,最后的输出结果为x=15。

C语言程序设计教程:不带参数的宏

不带参数的宏定义的格式如下:

#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”,然后编译即可。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈