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

标签 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);
    }

最佳答案

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

这是一个完整的表达式,您在其中分配 z 两次。所以它可以被解释得不明确,C抽象机的结果是 undefined behavior .

对于z=--z也是如此。

关于c - 为什么输出是 6 而不是 7?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55029829/

相关文章:

c++ - 在条件运算符中使用对象两次会产生 UB 吗?

C++ cout 行为/执行顺序

c - 如何从未知输入类型(文件流或标准输入)读取数据 C

c++ - 使用自定义比较函数设置相等性

c - 如何使用 "x = x++"之类的内容获取 VS 或 Xcode 警告?

c++ - 复制对象时赋值运算符的工作

c++ - C中的&&运算符是什么

比较两个整数数组并返回下标 (C)

c - 填充该结构的最佳方法是什么?

c - C中线程同步和条件变量的问题