gpt4 book ai didi

c - c 中增量运算的求值顺序

转载 作者:行者123 更新时间:2023-11-30 20:47:32 24 4
gpt4 key购买 nike

我执行了以下代码。


int main(void)
{
int c;
c=0;
printf("%d..%d..%d \n", c,c,c);
c=0;
printf("%d..%d..%d \n", c,c,c++);
c=0;
printf("%d..%d..%d \n", c,c++,c);
c=0;
printf("%d..%d..%d \n", c++,c,c);<p></p>

return 0;}

我期望输出为

0..0..0

1..1..0

0..1..0

0..0..0

但是输出(用 gcc 编译)是

0..0..0

1..1..0

1..0..1

0..1..1

我的期望有什么问题吗?在 gcc 中,求值顺序是从右到左。是吗?

最佳答案

What is wrong with my expectation?

未指定函数参数的计算顺序 - 由实现决定。而且,没有sequence point * 位于参数之间,因此在序列点之前再次使用修改后的参数无法为您提供可预测的结果:这是未定义的行为 ( thanks, Eric, for providing a reference to the standard )。

如果您想要特定的评估顺序,则需要将参数评估为完整表达式(这会强制每个参数之间存在序列点):

int arg1 = c++;
int arg2 = c;
int arg3 = c;
// This: printf("%d..%d..%d \n", c++,c,c);
// Becomes this:
printf("%d..%d..%d \n", arg1, arg2, arg3);

<小时/> * 序列点是代码中某个位置的奇特名称,在该位置之后您可以计算已应用的所有先前表达式的副作用,例如增量或减量。

关于c - c 中增量运算的求值顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17907520/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com