2016-11-28 22 views
1

我有一個程序在不同的編譯器上給出不同的輸出。C++的編譯器執行順序如何變化

當我編譯這個使用gcc編譯它給輸出「badcfe」。 但是當使用其他編譯器時,它會給出「caec」。 有人可以幫我一下,它是如何有兩個不同的輸出(與解釋)。

+0

http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior –

回答

4

*p++ = *(p+1)將作爲*(p++) = *(p+1)由於算符優先進行評估。

這整個表達式的行爲是不確定的因爲你正在閱讀和在未測序一步寫p。所以編譯器在遇到這個表達式時可以做任何想做的事情,這就是你所觀察到的輸出的差異。

「未定義」與i = i++;類似,其整體類型爲i