I know what is short circuit evaluation in C.
a && b
(operand b is not checked if a = 0)
a || b
(operand b is not checked if a = non zero)
But I am stuck at this question
int x = 0;
if (5 || 2 && ++x)
printf("%d", x);
This outputs 0
.
My first thinking goes as follows:
According to precedence table , precedence is ++
, &&
, ||
(descending order)
++x
: evaluated.x
becomes 1.
2 && ++x
evaluated. Both operands are evaluated.
||
is evaluated.
But according to this, 1
should be printed, not 0
.
My second thinking goes as this:
5 || anything
anything
is not evaluated because of short circuit evaluation, so no precedence comes into play here.
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…