最近在用宏定义时,总是得不到正确的结果,最后才发现是由于宏定义中缺少了括号所致,故特作此文,以警人警己。
比如:
#define MIN(a, b) a > b ? b : a
这样定义也不是每次都有问题。如果用到这个宏的代码像这样,MIN(3, 5) / 2就有问题了。
所以需要改成这样:
#define MIN(a, b) (a > b ? b : a)
即使这样,也会有问题。我举不出例子,微软的代码里是这样的:#define MIN(a,b) ((a) > (b) ? (b) : (a))
看另一个宏:
#define MULTIPLY(a,b) (a*b)
这里没有给a,b加括号。
使用时,MULTIPLY(3+2,5) 的结果为13,不是用户希望的25,所以要给输入变数加括号。
最后
以上就是体贴电源最近收集整理的关于宏定义中的括号重要性的全部内容,更多相关宏定义中内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复