我指的是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) –