Fre*_*gon 3 c logical-operators
#include <stdio.h>
int main()
{
int x = -2;
while (x++ || x==0)
{
printf("X");
}
}
Run Code Online (Sandbox Code Playgroud)
输出如下
XX
为什么?
我期望这段代码进入无限循环,因为增量将使逻辑或的任一侧都为真。
逻辑 OR 运算符保证在评估右侧(如果有的话)之前,将完全评估左侧,包括任何副作用。更正式地说,左侧的评估和右侧的评估之间存在一个序列点。
x当评估此条件时,如果为 0:
(x++ ||x==0)
Run Code Online (Sandbox Code Playgroud)
左侧将计算为 0,即 false,并x递增为 1。然后,因为左侧为 0,所以计算右侧。由于x现在为 1,右侧的计算结果也为 0,使条件为假并导致循环终止。