如果(a,b,c,d)这是如何工作的?

时间:2013-08-26 08:42:22

标签: c if-statement

int main(void)
{
  int a=0, b=20;
  char x=1, y=10;
  if(a,b,x,y)
    printf("bye");
  return 0;
}

上述代码中的“if”条件如何工作? “y”的值是否仅由“if”来考虑?

4 个答案:

答案 0 :(得分:17)

是的,逗号运算符的值是右操作数。因为其他操作数都没有副作用,所以归结为if (y)

答案 1 :(得分:6)

来自Wikipedia

  

在C和C ++编程语言中,使用逗号运算符   (由标记表示)是一个二进制运算符,用于计算它   第一个操作数并丢弃结果,然后计算第二个操作数   操作数并返回此值(和类型)。

这实际上意味着只对最终操作数进行真实性评估,之前操作数的结果将被丢弃。

if(a,b,x,y)中,只考虑y的真实性,因此y评估的内容将被视为真/假。

在您的情况下,y等于10,在C中被视为true,因此if检查也将评估为trueif将输入阻止。

您可能希望在StackOverflow上考虑this very popular question的使用(和误用)。

答案 2 :(得分:4)

,(逗号)运算符分隔表达式。如果多个值括在圆括号中,则圆括号中的最后一个值将被赋值给变量。

e.g a=(x,y,z);
then  a=z;

而if,

a=x,y,z;

然后上面的表达式被评估为(a=x);

请参阅this

答案 3 :(得分:0)

如上所述Joey,评估仅为

if (y)
    ....

重要的是要注意,如果你的代码已经读过:

int main(void)
{
  int a=0, b=20;
  char x=1, y=10;
  if(a++,b++,x++,y)
    printf("%d, %d, %d, %d\n", a, b, (int)c, (int)y);
  return 0;
}

输出将是

1, 21, 2, 10

所有增量都已执行但是为了评估条件

(a++,b++,x++,y)

唯一重要的是最后一个,即y