2013-04-16 101 views
1

我寫了一個簡單的程序,其中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

可以一尼永向我解釋這個嗎?

+0

你確定你在第一個printf中得到9 10 10嗎? –

+0

其他可能的重複: 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

+0

「任何人都可以解釋我這件事嗎?」 - 如果你想知道編譯器做了什麼,那產生了那個結果,然後反彙編可執行文件,或者告訴你的編譯器輸出程序集。但從相當重要的意義上說,這並不重要。你的代碼每個標準都有未定義的行爲,所以編譯器「合法」可以做任何事情。它也可能因編譯器,版本和優化選項而異。 –

回答

3

您遇到未定義的行爲,由於有多個表達式帶有副作用,沒有sequence points inbetween

無法保證函數參數被評估的順序,所以在這裏沒有辦法「期待」某些東西(除非編寫了編譯器)。

+0

我寫這個printf作爲兩個單獨的實例 – Manu

+0

@Manu對不起,我不明白你的評論。 – unwind