答案 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 = 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.
答案 1 :(得分:4)
逗号运算符: 按顺序评估a和b,c和d并返回d的结果。
答案 2 :(得分:2)
它评估a,然后是b,然后是c,然后是d,并使用d
的值作为if
的条件。其他三个被评估,但通常仅用于副作用 - 结果被丢弃。