我正在测试一些代码,这是我发现的一件奇怪的事情:
#include<stdio.h>
void main()
{int m,n;
for(m=0, n=0; m<0,n<4; m++,n++)
printf("hello\n");
}
我的猜测是它不会打印,因为条件m<0
不满意。但我对此感到震惊:
hello
hello
hello
hello
任何人都可以解释这个结果。为什么没有评估m<0
条件?
答案 0 :(得分:3)
在C(和许多其他语言)中,逗号运算符是一个二元运算符,它计算第一个操作数并丢弃结果,然后计算第二个操作数并返回第二个操作数的结果。
所以cond1, cond2
评估这两个条件,但仅cond2
很重要。
如果您希望满足这两个条件,请使用cond1 && cond2
。
所以
for(m=0, n=0; m<0 && n<4; m++,n++)
答案 1 :(得分:2)
你的意思是m < 0 && n < 4
。
,
运算符采用两个表达式,执行它们(即潜在的副作用),但计算 second 表达式的结果。因此m < 0, n < 4
评估m < 0
(没有副作用,因此也可能不存在),丢弃值false
,然后返回n < 4
。
答案 2 :(得分:1)
它会被评估,但逗号运算符,
将放弃条件m<0
的效果。
答案 3 :(得分:1)
表达式m<0
确实得到了评估,但由于comma operator,其结果被丢弃,下一个表达式n<4
的结果用于for
- 相反。
如前所述:表达式m < 0 && n < 4
也将评估两个子表达式,但只有当它们都为真时才返回true。