我寫了一個簡單的程序,其中int a = 10
,我期待的O/P爲10 9 9
增量和變量的遞減printf中
printf("a++:%d \t a:%d \t --a: %d \n", a++, a, --a);
但O/P即得是9 10 10
我寫像printf(" a:%d \t --a: %d \n", a, --a);
的O/p其中我得到另一個printf的是9 9
可以一尼永向我解釋這個嗎?
我寫了一個簡單的程序,其中int a = 10
,我期待的O/P爲10 9 9
增量和變量的遞減printf中
printf("a++:%d \t a:%d \t --a: %d \n", a++, a, --a);
但O/P即得是9 10 10
我寫像printf(" a:%d \t --a: %d \n", a, --a);
的O/p其中我得到另一個printf的是9 9
可以一尼永向我解釋這個嗎?
您遇到未定義的行爲,由於有多個表達式帶有副作用,沒有sequence points inbetween。
無法保證函數參數被評估的順序,所以在這裏沒有辦法「期待」某些東西(除非編寫了編譯器)。
你確定你在第一個printf中得到9 10 10嗎? –
其他可能的重複: http://stackoverflow.com/questions/376278/parameter-evaluation-order-before-a-function-calling-in-c http://stackoverflow.com/questions/15027347/ c函數參數評估和傳遞 http://stackoverflow.com/questions/9566187/function-parameter-evaluation-order – aib
「任何人都可以解釋我這件事嗎?」 - 如果你想知道編譯器做了什麼,那產生了那個結果,然後反彙編可執行文件,或者告訴你的編譯器輸出程序集。但從相當重要的意義上說,這並不重要。你的代碼每個標準都有未定義的行爲,所以編譯器「合法」可以做任何事情。它也可能因編譯器,版本和優化選項而異。 –