0

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

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

if (a, b, c, d) {

    blablabla..
    blablabla..

}

这个 if 语句是什么意思?

4

3 回答 3

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。

于 2012-05-09T07:08:32.617 回答
4

逗号运算符:依次计算 a 和 b 以及 c 和 d 并返回 d 的结果。

于 2012-05-09T07:09:07.840 回答
2

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.

于 2012-05-09T07:10:09.513 回答