#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.该&&的优先级应高于||.
为什么是b和c还在0?
Bat*_*eba 13
表达++a || ++b && ++c被分组为++a || (++b && ++c).但是,右侧的||只是评估,如果++a是0,它不是.
R S*_*ahu 12
这里有三个问题:
优先顺序意味着++a || ++b && ++c评估为++a || (++b && ++c).
但是,由于逻辑运算符的短路要求,++a首先要进行评估.只有评估的评估结果false才会(++b && ++c)被评估.在您的情况下,++a评估为true.因此,(++b && ++c)永远不会被评估.