为什么输出是6而不是7?

时间:2019-03-06 18:22:52

标签: c operators sequence-points

以下C代码正确执行,但未按预期执行。 z=z++中的后递增运算符在此处造成混乱。我可能无法找出愚蠢的错误/概念,请给我一个简短的解释或一些有用的链接。

 #include<stdio.h>
    int main()
    {
        int x=5,y=6,z=7;
        if(x-y)

            z=z++;
            z=--z;

        printf("%d",z);
    }

2 个答案:

答案 0 :(得分:0)

您不允许执行z=z++;,因为在2个序列点之间您不能分配2次变量。

这是一个完整的表达式,您可以在其中分配z 2次。因此它可以被模糊地解释,并且C抽象机的结果为undefined behavior

z=--z相同。

答案 1 :(得分:-1)

由于if条件5-6 = -1为false,因此永远不会执行z = z ++。因此,仅执行z = --z并得出答案6