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

Adi*_*iti 0 objective-c

我在目标C中编写了一个程序.

int a = 3;

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

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

返回输出:a = 11

而在c#中,输出为12.

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

Lil*_*ard 6

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