C语言中if(a,b,c,d)的含义是什么?

时间:2012-05-09 07:06:41

标签: c if-statement

  

可能重复:
  C++ Comma Operator

我在C语言中看过if语句。像这样。

if (a, b, c, d) {

    blablabla..
    blablabla..

}

这句话的含义是什么?

3 个答案:

答案 0 :(得分:7)

你有一个逗号运算符的例子。它评估所有四个表达式,但对d语句使用if

除非d以外的表达式有副作用(例如a++),否则它们是无用的。您可以使用迷你程序查看它:

#include <stdio.h>
int main (void) {
    if (1,0) printf ("1,0\n");
    if (0,1) printf ("0,1\n");
    return 0;
}

输出:

0,1

大多数人在没有意识到的情况下使用它,如:

for (i = 0, j = 100; i < 10; i++, j--) ...

i = 0j = 100i++j++是两个完整表达式的组成部分,每个表达式都使用逗号运算符。

标准的相关部分是C11 6.5.17 Comma operator

  

<强>语法:

     

expression:
  assignment-expression
  expression , assignment-expression

     

<强>语义:

     

逗号运算符的左操作数被计算为void表达式;它的评估与右操作数之间存在一个序列点。然后评估右操作数;结果有其类型和价值。

     

实施例

     

如语法所示,逗号运算符(如本子条款所述)不能出现在使用逗号分隔列表中的项目的上下文中(例如函数的参数或初始化程序列表)。另一方面,它可以在括号内表达式中使用,也可以在这种上下文中的条件运算符的第二个表达式中使用。在函数调用中:

     

f(a, (t=3, t+2), c)

     

该函数有三个参数,第二个参数的值为5.

答案 1 :(得分:4)

逗号运算符: 按顺序评估a和b,c和d并返回d的结果。

答案 2 :(得分:2)

它评估a,然后是b,然后是c,然后是d,并使用d的值作为if的条件。其他三个被评估,但通常仅用于副作用 - 结果被丢弃。