最近在用宏定义时,总是得不到正确的结果,最后才发现是由于宏定义中缺少了括号所致,故特作此文,以警人警己。
比如:
#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,所以要给输入变数加括号。