【发布时间】:2013-04-22 17:08:01
【问题描述】:
复合逻辑AND/OR表达式中的各个表达式是否应该在将逻辑运算符应用于其结果之前先进行评估?为什么++k在条件@987654322中保持不变@ 用于以下程序:
#include<stdio.h>
int main()
{
int i=-3, j=2, k=0, m;
m = ++i && ++j || ++k;
printf("%d, %d, %d, %d\n", i, j, k, m);
return 0;
}
输出: -2,3,0,1
但我希望输出-2,3,1,1
【问题讨论】:
-
因为标准保证了短路。由于
++i && ++j评估为true,因此无论||的评估如何,最终结果都将评估为true,因此最终的||根本不会被评估。这被称为短路。 C 和 C++ 标准保证||和&&运算符的这种行为。 -
我确实回答了,但我不明白为什么人们在深入研究他们的 C 编程语言书之前先在 StackOverflow 上提问。
-
“复合逻辑 AND/OR 表达式中的各个表达式不应该首先被求值吗”——不,当然不是,即使是最基本的 C 语言阅读也能说明这一点你。
-
@ruppell's Yes 当然,您只需将逻辑 OR 运算符替换为按位 OR 运算符即可获得输出。
标签: c expression logical-operators