Line 1: Line 1:
 
<metadesc>Short Circuit Rule in C language, Predict the output</metadesc>
 
<metadesc>Short Circuit Rule in C language, Predict the output</metadesc>
 +
===What's the output?===
 
<syntaxhighlight lang="c">
 
<syntaxhighlight lang="c">
===What's the output?===
 
 
#include<stdio.h>
 
#include<stdio.h>
 
int main()
 
int main()

Revision as of 13:33, 20 December 2013

What's the output?

<syntaxhighlight lang="c">

  1. include<stdio.h>

int main() {

  int a = 1, b;
  b = ++a || ++a;
  printf("%d %d", a,b);
  return 0;

} </syntaxhighlight>

(A) Undefined Value

(B) 3 1

(C) 2 1

(D) 2 2

Solution

Anyone who have read about undefined value in C language might think that the answer here is Undefined. But, in the definition of undefined value, for expressions, its clearly mentioned about sequence points and logical operators || and && are to be considered as sequence points. That is , all the side effects of expressions should be complete before evaluation these operators. This is done so that short circuiting rule (explained below) would work in C.

Short circuiting rule is used to short circuit the evaluation of an expression as soon as the result of the whole expression is known. i.e.; Once the end result of an expression is determined at some point during the evaluation of that expression, the remaining part of the expression is not evaluated. This happens in the case of logical operators && and ||.

In the question here, consider the statement

 b = ++a || ++a;

Here, we know the value of b, just when we see ||, as ++a returns a positive number. Hence, the compiler will skip the remaining execution of the expression and a is incremented to 2 and b is assigned the result of || operator which is 1.

Similarly for && operator, the second part of the expression won't be evaluated if the first half evaluates to 0.




blog comments powered by Disqus

What's the output?[edit]

<syntaxhighlight lang="c">

  1. include<stdio.h>

int main() {

  int a = 1, b;
  b = ++a || ++a;
  printf("%d %d", a,b);
  return 0;

} </syntaxhighlight>

(A) Undefined Value

(B) 3 1

(C) 2 1

(D) 2 2

Solution[edit]

Anyone who have read about undefined value in C language might think that the answer here is Undefined. But, in the definition of undefined value, for expressions, its clearly mentioned about sequence points and logical operators || and && are to be considered as sequence points. That is , all the side effects of expressions should be complete before evaluation these operators. This is done so that short circuiting rule (explained below) would work in C.

Short circuiting rule is used to short circuit the evaluation of an expression as soon as the result of the whole expression is known. i.e.; Once the end result of an expression is determined at some point during the evaluation of that expression, the remaining part of the expression is not evaluated. This happens in the case of logical operators && and ||.

In the question here, consider the statement

 b = ++a || ++a;

Here, we know the value of b, just when we see ||, as ++a returns a positive number. Hence, the compiler will skip the remaining execution of the expression and a is incremented to 2 and b is assigned the result of || operator which is 1.

Similarly for && operator, the second part of the expression won't be evaluated if the first half evaluates to 0.




blog comments powered by Disqus