了解#define用法中的副作用

时间:2013-12-12 05:59:57

标签: c

我指的是this question

  

#define max(a,b) ((a<b)?b:a)

这会产生一些副作用,如答案所述;

  

如果您使用max(a ++,b ++)作为示例(a或b),则会出现副作用   将增加两次)

我无法理解这种副作用;当我们使用max(a ++,b ++)时,为什么a或b会递增两次?

2 个答案:

答案 0 :(得分:7)

如果您在代码中使用max(a++,b++)

x = max(a++,b++);

文本替换发生在

x = ((a++<b++)? b++ : a++);
      ^   ^     ^---------Increment if condition is true
      |---|---------Increment

因此,您将逐步增加ab ...

答案 1 :(得分:1)

max(a++, b++)将展开为((a++ < b++) ? b++ : a++)。从左侧开始评估时,表达式(a++ < b++)优先,并且会增加ab。这是第一个增量。然后,根据<运算符的输出,ab将再次递增(这是第二个增量)。