[英]What's the meaning of if(a,b,c,d) in C Language
您所拥有的是一个逗号运算符的示例。 它计算所有四个表达式,但对if
语句使用d
。
除非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的结果。
它计算一个,则b,则c,则d,并且使用的值d
作为条件if
。 对其他三个进行评估,但通常仅针对副作用-丢弃结果。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.