37. 下列 C 程式碼何者會導致未定義行為(Undefined Behavior)?
(A) char chs[] = "12345";
(B) int i = 0; i = i++;
(C) int p = 0; printf("%d", p);
(D) int p = 0; printf("%p", (void*)&p);

答案:登入後查看
統計: A(65), B(73), C(31), D(81), E(0) #1403507

詳解 (共 2 筆)

#1456897
http://blog.ez2learn.com/2008/09/27/evil-undefined-behavior/
6
0
#3343975

Undefined behavior

語言規格在定義時為了編譯器實做上的彈性和效率考量,會刻意不去規定某些規格,因此如果寫出來的程式依賴或著錯用某些沒有在規格內所規定的特性時,我們就稱之為Undefined behavior,而這樣的程式在不同的編譯器實作所編出來的程式執行結果可能會有所不同

這是因為:

C語言沒規定i++或++i的“加1”動作到底是在哪個敘述的哪個時刻執行,因此,不同C編譯器若在不同的位置+ 1,就可能導致截然不同的結果。

如果以下列例子來察覺未定義行為,則在樓上(1F)提供的連結中,有完整的說明

i = 10;

i = i++ + ++i;


3
0