概述
宏是可以带参数的,它在形式上和函数非常相似。不过不像函数,宏仅仅是字符串替换,不是按值传递,所以在编写宏时要特别注意,一不小心可能就会踩坑。
#define SQ(y) y*y
当n = 9 时,SQ(n) = 81
如果把SQ(n)
换成SQ(n+1)却得不到100,因为
sq = n+1*n+1;
如果希望得到正确的结果,应该将宏定义改为如下的形式:
#define SQ(y) (y)*(y)
要想得到正确的结果,还应该对宏加以限制,在两边增加( )
,如下所示:
#define SQ(y) ( (y)*(y) )
发生函数调用时,编译器会先对实参进行计算,再将计算的结果传递给形参,并且函数执行完毕后会得到一个值,而不是得到一个表达式,这和简单的字符串替换相比省去了很多麻烦,所以在编写C++代码时我推荐使用内联函数来替换带参数的宏。
和宏一样,内联函数可以定义在头文件中(不用加 static 关键字),并且头文件被多次#include
后也不会引发重复定义错误。这一点和非内联函数不同,非内联函数是禁止定义在头文件中的,它所在的头文件被多次#include
后会引发重复定义错误。这一点非常好啊!!!!
最后
以上就是愤怒水池为你收集整理的【C++】C++内联函数也可以用来代替宏的全部内容,希望文章能够帮你解决【C++】C++内联函数也可以用来代替宏所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复