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

Beo*_*eok 0 c if-statement

可能重复:
C++逗号运算符

我曾经看过C语言中的语句.像这样.

if (a, b, c, d) {

    blablabla..
    blablabla..

}
Run Code Online (Sandbox Code Playgroud)

这个if语句的含义是什么?

pax*_*blo 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;
}
Run Code Online (Sandbox Code Playgroud)

哪个输出:

0,1
Run Code Online (Sandbox Code Playgroud)

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

for (i = 0, j = 100; i < 10; i++, j--) ...
Run Code Online (Sandbox Code Playgroud)

i = 0,j = 100,i++j++是其中的每一个使用逗号操作者两个完整表达式的组分.

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

句法:

expression:
   assignment-expression
   expression , assignment-expression

语义:

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

例:

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

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

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