可能重复:
C++ 逗号运算符
我曾看过 C 语言中的 if 语句。像这样。
if (a, b, c, d) {
blablabla..
blablabla..
}
这个 if 语句是什么意思?
你有一个逗号运算符的例子。它计算所有四个表达式,但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。
逗号运算符:依次计算 a 和 b 以及 c 和 d 并返回 d 的结果。
It evaluates a, then b, then c, then d, and uses the value of d
as the condition for the if
. The other three are evaluated, but normally only for side-effects -- the results are discarded.