2011-11-10 19 views
0

我的目標C.目標C中++運算符的不同行爲?

int a = 3; 

a = (a++) * (a++); 

NSLog(@"a= %d",a); 

返回編譯的程序輸出: A = 11

而在C#中的輸出爲12

任何人都可以解釋我的行爲的差異目標C中的++運算符?

回答

6

運營商++沒有區別。問題是你正在調用未定義的行爲。具體而言,您正在讀取並更新相同序列點中的a變量兩次,這在ANSI C規範中明確未定義。您從該表達式得到的值可能因編譯器不同而不同,甚至可能在相同編譯器版本之間有所不同,甚至在開啓單獨優化的同一編譯器版本的調用之間也會有所不同。

+0

非常感謝。 – Aditi

+0

@Aditi:至少[惡魔沒有飛出你的鼻子](http://catb.org/jargon/html/N/nasal-demons.html)! –