2012-11-28 81 views
1

可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)printf的輸出是相反的順序

i的GCC

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

嘗試這種簡單的C程序,並輸出爲9,7, 7,6,6 我追溯它,並認爲它會打印6,6,7,7,9,但我發現我的假設相反的順序,怎麼會來!

+0

這是未定義的行爲。您基本上只能在語句內的每個遞增變量或位置增加一次。 –

+0

我的輸出是:9,7,9,6,9 – antonio081014

回答

4

因爲你的程序有未定義行爲。在函數參數的評估之間沒有序列點,並且在沒有插入序列點的情況下多次改變相同對象是未定義的行爲。

該程序只是不合格。這不是一個有效的C程序。

+2

如果使用'gcc -Wall'進行編譯,會得到一些警告,例如'eslam.c:4:39:警告:對'x'的操作可能是未定義的 –