当涉及多个操作符时,如何确定执行顺序?

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);

也就是将布尔表达式的结果赋值给一个变量。这里没有魔法。

根据 operator precedence

  • == 具有最高优先级,
  • ||第二高
  • =最少。

所以,

EOLorEOFfound = ch == '\n' || ch == EOF;

相同
EOLorEOFfound = ( (ch == '\n') || (ch == EOF) );

所以它所做的就是将 ch 与给定值进行比较,然后将结果分配给 EOLorEOFfound

FWIW,请注意,逻辑或 (||) 的结果类型为 int.