不带参数的宏定义的一般格式如下:
其含义是用指定的宏名(即标识符)来代表其后的字符串。例如:
以上宏定义的作用分别是:用标识符N代表字符串1000;用标识符E代表字符串2.71828;用标识符GS代表字符串“%d,%d,%d,%d\n”。
在编译预处理时,将程序中在该命令以后出现的所有N用1000代替、E用2.71828代替、GS用“%d,%d,%d,%d\n”代替。这样,用一个简单的名字代替一个长的字符串,可以减小用户重复编程的工作量,而且不容易出错。
在定义时所用的标识符称为宏名,如示例中的N、E和GS都是宏名。宏名通常用大写字母表示。在预编译时,将宏名替换成字符串的过程称为宏展开。定义宏与定义变量的含义不同,宏定义只是作字符替换,系统不为宏名分配内存空间。
例7.1 从键盘输入若干个数,计算它们的和。为了提高程序的灵活性,可以使用宏来控制个数。
【分析】本题使用宏来控制数的个数,以实现灵活性。如果输入数的个数变化,修改宏即可,程序的其他部分不用修改。
程序代码如下:
关于宏定义的几点说明:
(1)宏定义可以出现在程序的任何位置。一般写在函数的外面,位于文件的开头。(www.daowen.com)
(2)宏名的有效范围是从定义处开始到本文件结束。但可以用#undef命令终止宏定义的作用域。示例代码如下:
“#undef N”的作用使得N的作用范围在“#undef N”处终止。
(3)不要在宏定义的行末加分号。因为加分号后,程序会将分号也视为字符串的组成部分,宏展开后就可能出现错误。
(4)宏定义是用宏名代替一个字符串,凡在宏定义有效范围内的宏名都用该字符串代替。注意:在双引号内与宏名相同的字符串不认为是宏名,不进行替换。
例如:
执行该程序段将输出“PI”,而不输出“3.14159”。
(5)可以引用前面已经定义过的宏名来定义新的宏。例如:
注意:该程序段中的K展开是3×1000+4×1000+200+1000+200/2,而不是3×1000+4×(1000+200)+(1000+200)/2,除非将第3行的定义改为“#define K 3*N+4*(M)+(M)/2”。
有时定义宏可特意增加括号,这样在宏展开时候不容易出错。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。