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

sre*_*rgo 5 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;
}
Run Code Online (Sandbox Code Playgroud)

上述代码中的"if"条件如何工作?"y"的值是否仅被"if"视为?

Joe*_*oey 17

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

  • @Deepanshu不,[逗号运算符](http://en.wikipedia.org/wiki/Comma_o​​perator)不关心除最后一个操作数之外的任何操作数的值.他们全部被评估,结果被抛弃,没有[短路评估](http://en.wikipedia.org/wiki/Short-circuit_evaluation)发生. (4认同)

Nob*_*lis 6

来自维基百科:

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

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

if(a,b,x,y)唯一的真实性y被视为因此无论y已经评价将被视为真/假.

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

您可能想在StackOverflow上考虑这个非常受欢迎的问题,因为它的用途(和误用).

  • 我认为,由于缺乏研究而应该正确关闭的问题得到了维基百科的回答,这是公平的. (2认同)