5
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

4 回答 4

17

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

于 2013-08-26T08:43:42.357 回答
6

来自维基百科

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

这实际上意味着仅评估最终操作数的真实性,丢弃先前操作数的结果。

仅考虑if(a,b,x,y)的真实性,y因此任何y已评估的内容都将被视为真/假。

在您的情况下y,等于trueC 中考虑的 10,因此if检查也将评估为true并输入if块。

您可能需要考虑StackOverflow 上这个非常流行的问题,以了解它的用途(和误用)。

于 2013-08-26T08:48:38.083 回答
4

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

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

而如果,

a=x,y,z;

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

请参考这个

于 2013-08-26T08:49:48.370 回答
0

正如乔伊上面所说,这仅是

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

于 2013-08-26T11:38:44.190 回答