逻辑运算符在C中的优先级

Jos*_*Shi 11 c

#include <stdio.h>

int main(void) {
    int a = 0, b = 0, c = 0;
    ++a || ++b && ++c;
    printf("%d %d %d", a, b, c);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出是1,0,0与gcc 8.1.0.该&&的优先级应高于||.

为什么是bc还在0

Bat*_*eba 13

表达++a || ++b && ++c分组++a || (++b && ++c).但是,右侧的||只是评估,如果++a0,它不是.

  • @EricShi你的评价顺序令人困惑...... (8认同)

R S*_*ahu 12

这里有三个问题:

  1. 优先顺序.
  2. 评估顺序.
  3. 逻辑运算符短路.

优先顺序意味着++a || ++b && ++c评估为++a || (++b && ++c).

但是,由于逻辑运算符的短路要求,++a首先要进行评估.只有评估的评估结果false才会(++b && ++c)被评估.在您的情况下,++a评估为true.因此,(++b && ++c)永远不会被评估.