我甚至不确定逗号运算符是否在这里是问题,但我不想写“我的C代码奇怪的问题。
#include <stdio.h>
int main() {
int i = 0, x = 0, y = 0, z = 0;
y = 3;
z = 5;
(x&&(y = z), i = 10);
printf("i:%d, x:%d, y:%d, z:%d\n", x, y, z, i);
return 0;
}
编译:
$ gcc -Wall deneme.c -o deneme
deneme.c: In function ‘main’:
deneme.c:9:4: warning: value computed is not used [-Wunused-value]
deneme.c:9:4: warning: value computed is not used [-Wunused-value]
,输出为:
i:0, x:3, y:5, z:10
所以,这是我的问题:
i
不是10?y
是5,这没关系,但为什么z
是10?x
是3?很抱歉,如果这是简单的问题,但我完全感到困惑。
答案 0 :(得分:2)
printf("i:%d, x:%d, y:%d, z:%d\n", x, y, z, i);
您将x
打印为i
,将y
打印为x
,将z
打印为y
,将i
打印为z
}}
答案 1 :(得分:1)
您在printf
中指定了错误的参数顺序答案 2 :(得分:0)
嗯...你对printf的参数顺序与字符串的文本不匹配。
即:你打印i x y z,但你传入x y z i。
所以i = 10,x = 0,y = 3 z = 5.
答案 3 :(得分:0)
警告的原因与逗号运算符无关,而是这个子表达式:x && (y = z)
被计算但未分配给任何东西或以任何方式使用,因此结果被丢弃。 / p>
x
的短路评估确实会产生副作用。即如果x
为零,y
将不会被分配z
,但这将是最好避免的时髦代码。
实际上,也可以在for(;;)构造的<expr1>
或<expr3>
之外避免使用逗号运算符。否则,它几乎没有什么用处或引人注目的用途。