我寫了下面的程序:呼叫的printf(「%d」)兩次,常量導致
#include<stdio.h>
int main(){
printf("%x\n");
printf("%x\n");
return 0;
}
我知道這是不確定的行爲,我只是檢查會發生什麼。編譯器是gcc。
樣本輸出是:
541d3118
7ffffff7
另一個樣本輸出是:
e0b08078
7ffffff7
當我與-O3
標誌編譯它,結果是:
5ec20f18
9
而且
3bedfa08
9
爲什麼第一個值會改變,但不是第二個值?爲什麼第二個值在高優化級別上有所不同?
未定義的行爲:您需要向'printf'添加一個int變量。 –
我想要一個選項來關閉帶有「未定義行爲」的問題作爲原因。 – DevSolar
@DevSolar爲什麼?試圖理解代碼如何以這種方式工作可能是完全合法的。 – glglgl