多个自增,自减运算符的使用 5C
  int x=3,y,z;
    y=(++x)+(x++)+(++x);
    z=(--x)+(x--)+(++x);
    printf("y=%d,z=%d\n",y,z);

为什么不同的编译器答案不同!Turbo c答案是y=15,z=18;codeblocks答案是y=15,z=14

c#

3个回答

qq_37804486
qq_37804486 http://www.ixueshu.com/document/824348865f82d4fd318947a18e7f9386.html看看这个
接近 2 年之前 回复
qjt19950610
几里路遥 不能下载那个pdf。
接近 2 年之前 回复
qjt19950610
几里路遥 谢谢你的回复!
接近 2 年之前 回复

这是典型的未定义行为,所谓未定义行为,就是c语言规范中没有规定编译器怎么做,编译器可以自己决定怎么设计的行为。结果不可预料。
好比说明书规定汽车可以开200kmph,那么这种汽车开240时候会如何,就不一定了,个体差异决定了会如何。
http://blog.jobbole.com/53211/
http://blog.csdn.net/qq_29169813/article/details/51416281

两个顺序点之间(也就是一条语句中),副作用只允许被改变一次,即同一个变量只能被改变一次,如果改变多次,其改变的顺序每次都会出现不一样,
可能先改变后一个再改变前一个,所以它的改变顺序会是紊乱的,故此结果会undefine。如若改变此种情况,那只能在一条语句中,只允许同一个变
量只被改变一次。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问