2010-06-24 111 views
1

如果INT VAR = 20那麼如何困惑的printf(),它包含前綴和後綴運算符

printf("%d %d %d", var--, ++var, --var); 

執行C編程語言中一樣。

+0

關於SO上的未定義行爲,有很多非常類似的問題,例如, http://stackoverflow.com/questions/2902638/post-and-pre-increment-in-c和更多... – 2010-06-24 11:29:06

回答

8

這是未定義的行爲,因爲var被修改了幾次而沒有序列點之間。例如,序列點可以是;。然而,參數列表中的逗號不會引入序列點,操作數的評估順序也是未定義的(可以說,代碼是雙重未定義的......)。

+4

操作數評估的順序不是未定義的,它是未指定的(有一個評估順序,實現不需要記錄它,也不需要保持一致 - 即使在同一代碼行的兩次執行之間)。 – AProgrammer 2010-06-24 11:32:04

+0

您可能想要考慮正在處理的函數參數序列。 – YeenFei 2010-06-24 12:55:57