可能重複:
What’s the side effect of the following macro in C ? Embedded C最新的輸出?
什麼將是以下的輸出:
#include <stdio.h>
#define MAN(x,y) ((x) < (y))?(x):(y)
main()
{
int i=10,j=5,k=0;
k= MAN(i++,++j);
printf("%d %d %d" ,i,j,k);
}
在這裏,我認爲,MAN(10,6)將被調用,輸出將是:
11 6 6
但是輸出
11 7 7
能有人請解釋這一點。
@chris這是無關的。我們不在這裏添加任何東西或者分配'x = x ++'。 – JJJ
@Xeo它*不是*同一件事。 OP的代碼基本上是'if(i ++> ++ j){k = ++ j; }'。序列是明確的。 – JJJ
沒關係。我忘記了那裏有一個序列點。 *第一個操作數被評估;在其評估和第二或第三操作數的評估之間有一個順序點(以評估者爲準)。第二個操作數 僅在第一個比較不等於0時才被評估;第一個操作數僅在 第一個比較等於0時計算;結果是第二或第三操作數 (無論哪個被評估)的值,轉換爲下面描述的類型。 110)* – chris