今天看到一篇文章,说:
int i = 1;
printf("the result is:%d", (++i) + (++i));
的结果是6。
该文中是用的是gcc,并且反汇编了目标码,汇编语言大意是:
set value_of_memory_address_of_i to 1;
increase value_of_memory_address_of_i by 1
increase value_of_memory_address_of_i by 1
add value_of_memory_address_of_i to value_of_memory_address_of_i
有的理解可能认为应该是 2+3=5。这里的问题和表达式的求值顺序无关。
我用vc++2010试了一下,也是同样的结果。
据说在一个语句中一个变量用多次++/--,是未定义行为。总之,绝不要写这种代码。