理解 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?
考虑以下代码:
#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?