这个是从C语言语法层面没法解释的,也没有意义。
具体过程要看编译器的实现方式,看懂汇编才行
y = (++x) + (++x) + (++x);
汇编的过程 是 先算 前两个++x,再算 (++x) + (++x),此时 x = 5,y = 5 +5 =10,然后再来一个++x,此时x=6,y = 10 + 6 = 16;
z = x+++x+++x++;
过程为: x = 6, z = 6 + 6 + 6 = 18,再计算三个x++ ==》 x+=1;x+=1;x+=1;最后x=9;
这是vc6的汇编过程,而codeblocks的结果是 y=16 z=21 ,z = 6+ 7+ 8,这两种编译实现的方式不一样,所以结果不一致。综上自增/自减的复合/混合运算,是没事找事。