我指的是this question副作用
#define max(a,b) ((a<b)?b:a)
这将有一定的副作用,如回答说;
如果使用最大值(A +,B ++),例如(A或B 将递增两次)
我无法理解这种副作用的副作用出现;当我们使用max(a ++,b ++)时,为什么a或b会增加两次?
我指的是this question副作用
#define max(a,b) ((a<b)?b:a)
这将有一定的副作用,如回答说;
如果使用最大值(A +,B ++),例如(A或B 将递增两次)
我无法理解这种副作用的副作用出现;当我们使用max(a ++,b ++)时,为什么a或b会增加两次?
如果你在这样的代码使用max(a++,b++)
,
x = max(a++,b++);
文本替换发生,因为
x = ((a++<b++)? b++ : a++);
^^ ^---------Increment if condition is true
|---|---------Increment
所以,你会被递增或者a
或b
两次......
没有括号包围'a ++'和'b ++'。 – timrau
文本替换实际上是'x =((a ++
@timrau雅试图编辑文本,但浏览器被卡住了。对不起,这个错误... – 2013-12-12 06:08:00
max(a++, b++)
将被扩展为((a++ < b++) ? b++ : a++)
。从左侧开始评估时,表达式(a++ < b++)
优先,并将增加a
和b
。这是第一个增量。然后根据<
运算符的输出,a
或b
将再次递增(这是第二个增量)。
请记住,宏实际上是文本替换。展开宏,你应该看到问题。 –
@FredLarson你的建议的确对我有帮助。谢谢 – user25108
另请阅读[Sequence point](http://en.wikipedia.org/wiki/Sequence_point) –