为啥是这样的结果呢? 这是来自effective c++上的例子,同样的宏,为啥一个执行两次自加,一个一次未执行。
m和n你在参数里根本没有使用,两次用的都是a和b,m和n当然不会自加。
对于自加两次是因为你在a和b的比较中少加了一个括号,使用以下形式即可。
#define CALL_WITH_MAX(a,b) (((a)>(b))?(a):(b))