1
我有一個程序在不同的編譯器上給出不同的輸出。C++的編譯器執行順序如何變化
當我編譯這個使用gcc編譯它給輸出「badcfe」。 但是當使用其他編譯器時,它會給出「caec」。 有人可以幫我一下,它是如何有兩個不同的輸出(與解釋)。
我有一個程序在不同的編譯器上給出不同的輸出。C++的編譯器執行順序如何變化
當我編譯這個使用gcc編譯它給輸出「badcfe」。 但是當使用其他編譯器時,它會給出「caec」。 有人可以幫我一下,它是如何有兩個不同的輸出(與解釋)。
*p++ = *(p+1)
將作爲*(p++) = *(p+1)
由於算符優先進行評估。
這整個表達式的行爲是不確定的因爲你正在閱讀和在未測序一步寫p
。所以編譯器在遇到這個表達式時可以做任何想做的事情,這就是你所觀察到的輸出的差異。
「未定義」與i = i++;
類似,其整體類型爲i
。
http://stackoverflow.com/questions/2397984/undefined-unspecified-and-implementation-defined-behavior –