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

时间:2016-04-27 10:10:25

标签: c syntax variable-assignment logical-operators

while (!EOLorEOFfound) {
      int ch == fgetc(stdin);
      EOLorEOFfound = ch == '\n' || ch == EOF;
}

注意:EOLorEOFfound的类型为bool。

StackOverFlow用户向我提供了有关另一个问题的答案。见这里:

How to determine if fgets stopped before all letters were read?

现在,我一直在困惑最后一行代码中的表达式实际上是什么。我怀疑它可能是某种形式的三元运算符?

2 个答案:

答案 0 :(得分:7)

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

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

即将布尔表达式的结果赋给变量。这里没有魔法。

答案 1 :(得分:4)

根据operator precedence

  • ||具有最高优先级,
  • =排名第二
  • EOLorEOFfound = ch == '\n' || ch == EOF; 最少。

所以,

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

相同
ch

所有它的作用是,将EOLorEOFfound与给定值进行比较,然后在||中分配结果。

FWIW,请注意,逻辑OR(int)的结果属于{{1}}类型。