我已经定义了以下最大宏
#define max(a,b)(a>b?a:b);
在 main() 内部,我正在执行以下操作
int t,a,b,c,d;
t=max(a,b)+max(c,d);
但是输出并不像预期的那样。t只显示了a和b之间的最大值。可能是什么问题呢?
这就像写作:
t = (a>b?a:b);+(a>b?a:b);
(检查预处理器输出)
;
从定义中删除。
删除;
. a#define
只是文本替换。
您还应该将a
andb
放在括号中作为最佳实践。这通常不会做太多,因为比较运算符可能优先于您可能传入的任何内容,但可以说是:
#define mul(a, b) (a * b)
然后你说mul(5-3, 10+2)
从这里你希望输出为 24 (2 * 12),但实际执行的是5-3 * 10+2
,并且使用操作顺序,这变成5-(3*10)+2
了 ,所以你的答案最终会变成 -23 。如果它被定义为
#define mul(a, b) ((a) * (b))
你不会有这个问题。