我定义了以下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中的最大值。 可能是什么问题?
答案 0 :(得分:5)
这就像写作:
t = (a>b?a:b);+(a>b?a:b);
(检查预处理器输出)
从 define 中删除;
。
答案 1 :(得分:2)
删除;
。 #define
只是文字替换。
您还应将a
和b
放在括号中作为最佳做法。这个通常不会做太多,因为比较运算符优先于你可能传递的任何东西,但是说它是:
#define mul(a, b) (a * b)
然后你说mul(5-3, 10+2)
从这里你可以期望输出为24(2 * 12),但实际执行的是5-3 * 10+2
,并且使用操作顺序,这变为{ {1}},所以你的答案最终会变成-23。如果它被定义为
5-(3*10)+2
你不会有这个问题。