【发布时间】:2018-09-29 05:26:38
【问题描述】:
我遇到了一个我无法理解的问题。 a 的输出是 6,b 是 -6,但无论我用什么变量初始化 c,它都保持不变。
#include <stdio.h>
void main()
{
int a = 5, b = -7, c = 0, d;
d = ++a && ++b || ++c;
printf("\n%d%d%d%d", a, b, c, d);
}
谢谢。
【问题讨论】:
-
短路。
-
因为如果
A为真或B为真,A || B的计算结果为真。如果A是真的,那么你不需要评估B,因为整个陈述都是真的。++a && ++b非零,因此它被评估为真,因此++c不需要评估,也不会被执行。 -
您不仅不需要评估
B,而且如果A评估为真,编译器禁止在B中生成执行副作用的代码。相关:例如if (p == NULL || p->value == 0) ...是安全的,即使p可以是NULL。
标签: c pre-increment