2012-11-17 36 views
0

可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)
Undefined Behavior and Sequence Points混亂與節目的輸出

#include<stdio.h> 
int main(){ 
int i=5,j=5,y,x; 
int m=++i; 
int n=++i; 
x=m+n; 
y=++j + ++j ; 
printf("%d %d ",x,y); 
return 0; 
} 

OUTPUT:13 14 任一項PLZ可以解釋爲什麼 'y' 的值是14而不是13.

+0

你可以做一些調試。 –

+3

@RamyAlZuhouri調試器不太可能會導致有人問這個問題得出它是未定義行爲的結論。 – Flexo

+0

如果是13,你會問爲什麼它是13而不是14? –

回答

2

大多數com在執行加法操作之前,堆棧器會增加j次,並將該值賦予y,這就是爲什麼結果在您的情況下是14.

儘管如此,C標準並未指定該表達式的評估順序另一個編譯器的結果可能確實是13。

換句話說,這是未定義的行爲,不應該在混淆比賽和難題之外使用。

+0

「**換句話說**,這是未定義的行爲「你沒有解釋爲什麼它是未定義的行爲。您已經聲明評估訂單未指定。這使得它不明確的行爲。爲什麼它是未定義的行爲的解釋涉及順序點,而不是評估順序。 –

+0

因爲在y = ++ j + ++ j中,您不知道右側和左側的++ j是否會放入兩個單獨的寄存器中? –