C语言宏定义参数的问题
宏定义是C语言提供的三种预处理功能的其中一种,这三种预处理包括:宏定义、文件包含、条件编译。今天小编给大家有关不带参数宏和带参数宏的一些。
不带参数宏
- 01
不带参数宏定义又称为宏代换,简称“宏”。 格式为:#define 标识符 字符串 宏名一般用大写,宏定义末尾不加分号。
- 02
如果程序中有大量相同变量数据要重新赋值,使用宏就不用一个一个地去修改。 替换过程是在编译前,只是单纯的做字符替换,所以不占存储空间。
带参数宏
- 01
宏也可以带参数,格式是#define宏名(参数表) 字符串 例如:#define add(x) x+x
- 02
不过实参如果是表达式容易出问题,比如上面的宏定义:#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.
- 03
而add(n+m)*k结果则是n+m+n+m*k,等于8. 不要错误地认为add(m+n)*k和add(n+m)*k的结果都是(n+m+n+m)*k=18,因为宏替换只是单纯的字符替换,是不会做运算的,运算时编译以后的事情。
- 04
带参数宏替换不要和函数调用弄混了,宏替换只占编译时间,不占运行时间。 函数调用占运行时间(分配内存、保留现场、值传递、返回值)。 宏替换使源程序变长,而函数调用则不会。
赞 (0)