C中逗号运算符的问题

时间:2014-01-04 17:15:37

标签: c

我甚至不确定逗号运算符是否在这里是问题,但我不想写“我的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?

很抱歉,如果这是简单的问题,但我完全感到困惑。

4 个答案:

答案 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>之外避免使用逗号运算符。否则,它几乎没有什么用处或引人注目的用途。