多语言展示
当前在线:1667今日阅读:176今日分享:34

C语言宏定义参数的问题

宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。今天小编给大家有关不带参数宏和带参数宏的一些经验。
工具/原料

vc6.0或者其他C编译器

不带参数宏
1

不带参数宏定义又称为宏代换,简称“宏”。格式为:#define 标识符 字符串宏名一般用大写,宏定义末尾不加分号。

2

如果程序中有大量相同变量数据要重新赋值,使用宏就不用一个一个地去修改。替换过程是在编译前,只是单纯的做字符替换,所以不占存储空间。

带参数宏
1

宏也可以带参数,格式是#define宏名(参数表) 字符串例如:#define add(x)  x+x

2

不过实参如果是表达式容易出问题,比如上面的宏定义:#define add(x)  x+x主函数中m=1,n=2,k=3;add(m+n)*k结果是怎么样呢?其实做的只是替换,编译前,add(m+n)替换成m+n+m+n,结果就是m+n+m+n*k,等于10.

3

而add(n+m)*k结果则是n+m+n+m*k,等于8.不要错误地认为add(m+n)*k和add(n+m)*k的结果都是(n+m+n+m)*k=18,因为宏替换只是单纯的字符替换,是不会做运算的,运算时编译以后的事情。

4

带参数宏替换不要和函数调用弄混了,宏替换只占编译时间,不占运行时间。函数调用占运行时间(分配内存、保留现场、值传递、返回值)。宏替换使源程序变长,而函数调用则不会。

注意事项

注意:字符串( ' ' )中永远不包含宏,即便#define boy 50,但是字符串“boy”不会替换成“50”

推荐信息