1

我已经定义了以下最大宏

#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之间的最大值。可能是什么问题呢?

4

2 回答 2

5

这就像写作:

t = (a>b?a:b);+(a>b?a:b);

(检查预处理器输出)

;定义中删除。

于 2013-11-07T19:11:28.890 回答
2

删除;. a#define只是文本替换。

您还应该将aandb放在括号中作为最佳实践。这通常不会做太多,因为比较运算符可能优先于您可能传入的任何内容,但可以说是:

    #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))

你不会有这个问题。

于 2013-11-07T19:21:48.683 回答