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.
The expression 5 || 2 && ++x
is equivalent to 5 || (2 && ++x)
due to operator precedence.
The run time evaluates the expression 5 || 2 && ++x
from left to right.
As we know in OR if first condition is true it will not check the second condition.
So here 5 evaluated as true and so (2 && ++x)
will not be performed.
That's why x will remain 0 here.
Correct. The expression is short circuited. You can test it with this.
if(5 || ++x) {
printf("%d\n",x);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With