gpt4 book ai didi

c - 操作数求值顺序 + 赋值副作用

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:14 24 4
gpt4 key购买 nike

我希望下面的代码打印 11,但打印了 12,除了最后一种情况,它打印了 10。

x=5; x1=x+(x=6); printf("%d\n",x1);  
x=5; x1=(x=x)+(x=6); printf("%d\n",x1);
x=5; x1=(x+0)+(x=6); printf("%d\n",x1);
x=5; x1=(x=5)+(x=6); printf("%d\n",x1);

x=5; x1=(x=6)+x; printf("%d\n",x1);
x=5; x1=(x=6)+(x=x); printf("%d\n",x1);
x=5; x1=(x=6)+(x+0); printf("%d\n",x1);
x=5; x1=(x=6)+(x=5); printf("%d\n",x1);

gcc 在每种情况下都会提示:“警告:对‘x’的操作可能未定义”。

这是卑鄙的。

伯恩哈德

PS:毫无疑问,抱歉。感谢您的回答。 :)
PPS:实际代码是:

while ( data-(data=read(adr)&(1<<6)) ) i++;  

我正在等待 adr 的第 6 位停止切换。

最佳答案

结果未定义,无需进一步解释。但是要解释编译器可以处理您的代码的两种可能方式:

int x = 1;
int n = (x=3) + x;

编译器可以先求值 (x=3),在这种情况下,对 n 的赋值值为 6。或者它可以先求值 x,在这种情况下,对 n 的赋值值为 4。

关于c - 操作数求值顺序 + 赋值副作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2977865/

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