目标C中++运算符的不同行为?

时间:2011-11-10 05:47:28

标签: objective-c

我在目标C中编译了一个程序。

int a = 3;

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

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

返回输出: 一个= 11

而在c#中,输出为12。

有人能解释一下目标C中++运算符的行为差异吗?

1 个答案:

答案 0 :(得分:6)

++运算符没有区别。问题是你正在调用未定义的行为。具体来说,您在同一序列点中读取和更新a变量两次,这在ANSI C规范中明确未定义。从该表达式获得的值可能因编译器而异,甚至可能在同一编译器的版本之间有所不同,甚至在打开单独优化的相同编译器版本的调用之间也是如此。