理解 Post C 中的增量概念

Understanding Post increment concept in C

考虑以下代码:

#include <stdio.h>

int main()
{
    int x=0,y=5;
    printf("x=%d,x_1=%d,sum=%d",x++,x,y+x);
    return 0;
}

我对这段代码的假设是,x 将打印为 0,稍后在后增量 x_1 上将打印为 1,y+x 为 5+1=6

实际结果是x如预期的那样为0,x_1如预期的那样为1。但是 y+x 是 5。我不确定为什么 x 保留了它以前的值,尽管发生了后增量。你能帮忙澄清一下吗? 我同样使用 gcc 编译器。

printf("x=%d,x_1=%d,sum=%d", x++, x, y+x);
//                           (a) (b)  (b)

你们正在更新 x (a) 并在同一个表达式中使用它的值 (b)(没有中间序列点)。
那是未定义的行为。

尝试

printf("x=%d,x_1=%d,sum=%d", x, x + 1, y + x + 1);
x++;

这是标准的未定义行为,函数参数的求值顺序是不确定的。阅读 [Why are these constructs using pre and post-increment undefined behavior?