【发布时间】:2024-04-14 18:45:01
【问题描述】:
我的印象是,在 C 语言中,逻辑 OR 运算符|| 是一个短路运算符,如果 lhs 为假,则不会计算 rhs。我在比较 OR'ed 值时遇到了问题。有人可以向我解释为什么以下代码(在 gcc 5.3 上)评估为真吗?我在 clang 中遇到了同样的行为。
#include <stdio.h>
int main() {
int attr = 2;
if( ((attr & 2) != 2) || ((attr & 4) != 4) ) {
printf("No short circuit?\n");
};
printf("%i %i\n",attr,(attr & 2));
};
输出:
No short circuit?
2 2
【问题讨论】:
-
你的印象是错误的。如果 LHS 为假,它会尝试 RHS。
-
that doesnt evaluate the rhs if the lhs is false,这根本没有任何意义。它与逻辑或应该是相反的。您的陈述对于逻辑 AND 是正确的。 -
"逻辑 OR 运算符 || 是一个短路运算符,如果 lhs 为假,则不计算 rhs" 休息一下! ;-)