gpt4 book ai didi

c - 函数更改全局变量的值是否会影响加法顺序?

转载 作者:行者123 更新时间:2023-12-04 10:35:19 25 4
gpt4 key购买 nike

<分区>

我试过下面的代码并感到困惑:

#include <stdio.h>

int m=3;
int f(void)
{
m--;
return m;
}
int main()
{
m=f()+m; //as + operator is executed from left to right, it is okay that m=2+2
printf("%d\n", m); //m=4, as expected
m=m+f(); //as + operator is executed from left to right, it should be like m=4+3
printf("%d\n", m); //but m=6
m+= f();
printf("%d\n", m);
return 0;
}

加号 (+) 运算符是可交换的,但在这里似乎加数的顺序很重要!!! (根据结合律)

为什么m=m+f();执行后m等于6?

看起来函数调用总是得到优先权!!!!

我不确定这是否是未定义的行为。据我所知,m=m+m-- 是一个未定义的行为,但这里的递减任务是通过函数以间接方式执行的。

在“子表达式求值顺序”这个问题中,答案是“如果需要,func1 和 func2 中的每一个都可以与一些共享数据交互,而不会以意想不到的方式更改其下的数据”,但这里的值m 已被函数 f 更改。

我后来尝试了这段代码,发现了另一个有趣的事情。函数评估优先级不是这里的问题 - 正如这表明的那样

#include <stdio.h>

int m;

int f()
{
m--;
return m;
}

int main()
{
m=4;
int x;
x=m+f()+f(); //if f() is evaluated first, then it should be like m=3+2+2
printf("%d\n",x); // but m=8
return 0;
}

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