#include <stdio.h>
int main()
{
int x = -2;
while (x++ || x==0)
{
printf("X");
}
}
输出结果为
XX
我期望这段代码会进入无限循环,因为递增将使逻辑 OR 的两侧都变为 true。
#include <stdio.h>
int main()
{
int x = -2;
while (x++ || x==0)
{
printf("X");
}
}
输出结果为
XX
x
为0:(x++ ||x==0)
左侧将计算为0,即false,并且x
增加到1。然后因为左侧是0,右侧被计算。由于x
现在是1,右侧也计算为0,使条件为false并导致循环终止。
printf("X = %d\n", x);
,然后看看会发生什么。当x
为零时,x++
将被执行,但是条件的第二个部分也将计算为假(因为在这发生时x
是1
)。在评估条件的左侧和右侧之间存在一个序列点。 - Jonathan Lefflerwhile (++x || x == 0)
会导致一个无限循环。 - Garr Godfreywhile
测试,x
起始值为-2,然后变为-1。对于第二个while
测试,x
起始值为-1,然后变为0。对于第三个while
测试,x
起始值为0,然后变为1。这种变化在评估x == 0
条件之前发生,因此实际上测试的是0 || 1 == 0
,这是错误的。 - Tom Karzes