当涉及多个操作符时,如何确定执行顺序?
How does the sequence of execution determined when multiple operators are involved?
while (!EOLorEOFfound) {
int ch == fgetc(stdin);
EOLorEOFfound = ch == '\n' || ch == EOF;
}
注:EOLorEOFfound
是bool类型。
Whosebug 用户就另一个问题给了我这个答案。看这里:
现在,我一直在想最后一行代码中的表达式到底做了什么。我怀疑它可能是某种形式的三元运算符?
EOLorEOFfound = ch == '\n' || ch == EOF;
和
一样
EOLorEOFfound = (ch == '\n' || ch == EOF);
也就是将布尔表达式的结果赋值给一个变量。这里没有魔法。
==
具有最高优先级,
||
第二高
=
最少。
所以,
EOLorEOFfound = ch == '\n' || ch == EOF;
与
相同
EOLorEOFfound = ( (ch == '\n') || (ch == EOF) );
所以它所做的就是将 ch
与给定值进行比较,然后将结果分配给 EOLorEOFfound
。
FWIW,请注意,逻辑或 (||
) 的结果类型为 int
.
while (!EOLorEOFfound) {
int ch == fgetc(stdin);
EOLorEOFfound = ch == '\n' || ch == EOF;
}
注:EOLorEOFfound
是bool类型。
Whosebug 用户就另一个问题给了我这个答案。看这里:
现在,我一直在想最后一行代码中的表达式到底做了什么。我怀疑它可能是某种形式的三元运算符?
EOLorEOFfound = ch == '\n' || ch == EOF;
和
一样EOLorEOFfound = (ch == '\n' || ch == EOF);
也就是将布尔表达式的结果赋值给一个变量。这里没有魔法。
==
具有最高优先级,||
第二高=
最少。
所以,
EOLorEOFfound = ch == '\n' || ch == EOF;
与
相同EOLorEOFfound = ( (ch == '\n') || (ch == EOF) );
所以它所做的就是将 ch
与给定值进行比较,然后将结果分配给 EOLorEOFfound
。
FWIW,请注意,逻辑或 (||
) 的结果类型为 int
.