我在目标C中编译了一个程序。
int a = 3; a = (a++) * (a++); NSLog(@"a= %d",a);
返回输出: 一个= 11
而在c#中,输出为12。
有人能解释一下目标C中++运算符的行为差异吗?
答案 0 :(得分:6)
++
运算符没有区别。问题是你正在调用未定义的行为。具体来说,您在同一序列点中读取和更新a
变量两次,这在ANSI C规范中明确未定义。从该表达式获得的值可能因编译器而异,甚至可能在同一编译器的版本之间有所不同,甚至在打开单独优化的相同编译器版本的调用之间也是如此。