理论教育 宏定义中不带参数的效果

宏定义中不带参数的效果

时间:2023-11-02 理论教育 版权反馈
【摘要】:不带参数的宏定义的一般格式如下:其含义是用指定的宏名来代表其后的字符串。在预编译时,将宏名替换成字符串的过程称为宏展开。定义宏与定义变量的含义不同,宏定义只是作字符替换,系统不为宏名分配内存空间。例7.1从键盘输入若干个数,计算它们的和。但可以用#undef命令终止宏定义的作用域。不要在宏定义的行末加分号。

宏定义中不带参数的效果

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

其含义是用指定的宏名(即标识符)来代表其后的字符串。例如:

以上宏定义的作用分别是:用标识符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”。

有时定义宏可特意增加括号,这样在宏展开时候不容易出错。

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

我要反馈