Let's concentrate on if condition,
*if (++k 5 k++/5 || ++k = 8);*
is equivalent to (based on operator precedence)
*if (((++k 5) (k++/5)) || (++k = 8));*
Initially k = 5.
Step1 : The first term in if clause i.e, (++k 5) is false which makes the
*((++k 5) (k++/5)) *false because all the
main()
{
int k = 5;
if (++k 5 k++/5 || ++k = 8);
printf(%d , k);
}
the output shud be 8 but it comes out to be 7.why???
as increment operator has higher precedence among them so increment shud be
done throughout at first and after then other operators shud be
if (++k 5 k++/5 || ++k = 8); is same as if ++k 5)
(k++/5)) || (++k = 8)));
(++k 5) (k++/5) in this expression ++k5 returns false(0) ,so there is
no need to evaluate right hand side(why?)
2012/11/6 Anil Sharma anilsharmau...@gmail.com
main()
{
int k = 5;
if (++k
Hi anil
first of all when the program starts k = 5
then compiler enters if region
then k is incremented before it is compared with 5 ie k = 6
then condition is checked ie ++k 5 and it comes out to be false
then as it was end operation compiler does not evaluate the second
statement ie k++/5
then