#define疑惑......为什么会出现这种情况

时间:2013-11-07 19:08:10

标签: c++ syntax macros

我定义了以下max macro

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

2 个答案:

答案 0 :(得分:5)

这就像写作:

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

(检查预处理器输出)

define 中删除;

答案 1 :(得分:2)

删除;#define只是文字替换。

您还应将ab放在括号中作为最佳做法。这个通常不会做太多,因为比较运算符优先于你可能传递的任何东西,但是说它是:

    #define mul(a, b) (a * b)

然后你说mul(5-3, 10+2)从这里你可以期望输出为24(2 * 12),但实际执行的是5-3 * 10+2,并且使用操作顺序,这变为{ {1}},所以你的答案最终会变成-23。如果它被定义为

5-(3*10)+2

你不会有这个问题。