int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a,b,x,y)
printf("bye");
return 0;
}
上述代码中的“if”条件如何工作? “y”的值是否仅由“if”来考虑?
答案 0 :(得分:17)
是的,逗号运算符的值是右操作数。因为其他操作数都没有副作用,所以归结为if (y)
。
答案 1 :(得分:6)
来自Wikipedia:
在C和C ++编程语言中,使用逗号运算符 (由标记表示)是一个二进制运算符,用于计算它 第一个操作数并丢弃结果,然后计算第二个操作数 操作数并返回此值(和类型)。
这实际上意味着只对最终操作数进行真实性评估,之前操作数的结果将被丢弃。
在if(a,b,x,y)
中,只考虑y
的真实性,因此y
评估的内容将被视为真/假。
在您的情况下,y
等于10,在C中被视为true
,因此if
检查也将评估为true
和if
将输入阻止。
您可能希望在StackOverflow上考虑this very popular question的使用(和误用)。
答案 2 :(得分:4)
,
(逗号)运算符分隔表达式。如果多个值括在圆括号中,则圆括号中的最后一个值将被赋值给变量。
e.g a=(x,y,z);
then a=z;
而if,
a=x,y,z;
然后上面的表达式被评估为(a=x);
请参阅this。
答案 3 :(得分:0)
如上所述Joey,评估仅为
if (y)
....
重要的是要注意,如果你的代码已经读过:
int main(void)
{
int a=0, b=20;
char x=1, y=10;
if(a++,b++,x++,y)
printf("%d, %d, %d, %d\n", a, b, (int)c, (int)y);
return 0;
}
输出将是
1, 21, 2, 10
所有增量都已执行但是为了评估条件
(a++,b++,x++,y)
唯一重要的是最后一个,即y