Translate

Labels

Monday 25 March 2013

C PUZZLE


  •    main(){

int i=1;
while (i<=5){
printf("%d",i);
if (i>2)
            goto here;
i++;
}
}
fun(){
here:
printf("PP");
}
Answer:
Compiler error: Undefined label 'here' in function main
Explanation:
Labels have functions scope, in other words The scope of the labels is limited to functions . The label 'here' is available in function fun() Hence it is not visible in function main.

  •    main(){

static      char names[5][20]={"pascal","ada","cobol","fortran","perl"};
int i;
char *t;
t=names[3];
names[3]=names[4];
names[4]=t;
for (i=0;i<=4;i++)
printf("%s",names[i]);
}
Answer:
Compiler error: Lvalue required in function main
Explanation:
Array names are pointer constants. So it cannot be modified.

  •    void main(){

      int i=5;
      printf("%d",i++ + ++i);
}
Answer:
Output Cannot be predicted  exactly.
Explanation:
Side effects are involved in the evaluation of   i.

  •     void main(){

      int i=5;
      printf("%d",i+++++i);
}
Answer:
Compiler Error
Explanation:
The expression i+++++i is parsed as i ++ ++ + i which is an illegal combination of operators.
  
  •       main(){

int i=1,j=2;
switch(i){
case 1:  printf("GOOD");
            break;
case j:  printf("BAD");
            break;
      }
}
Answer:
Compiler Error: Constant expression required in function main.
Explanation:
The case statement can have only constant expressions (this implies that we cannot use variable names directly so an error).
      Note:
Enumerated types can be used in case statements.

  •    main(){

int i;
printf("%d",scanf("%d",&i));  // value 10 is given as input here
}
Answer:
1
Explanation:
Scanf returns number of items successfully read.Here 10 is given as input which should have been scanned successfully. So number of items read is 1.

  •    #define f(g,g2) g##g2

main(){
int var12=100;
printf("%d",f(var,12));
      }
Answer:
100

  •     main(){

int i=0;
for(;i++;printf("%d",i)) ;
printf("%d",i);
}
Answer:
      1
Explanation:
Before entering into the for loop the checking condition is "evaluated". Here it evaluates to 0 (false) and comes out of the loop, and i is incremented (note the semicolon after the for loop).
     
  •    main(){

extern int i;
i=20;
printf("%d",sizeof(i));
}
Answer:
Linker error: undefined symbol '_i'.
Explanation:
extern declaration specifies that the variable i is defined somewhere else. The compiler passes the external variable to be resolved by the linker. So compiler doesn't find an error. During linking the linker searches for the definition of i. Since it is not found the linker flags an error.

  •     main(){

printf("%d", out);
}
int out=100;
Answer:
Compiler error: undefined symbol out in function main.
Explanation:
The rule is that a variable is available for use from the point of declaration. Even though a is a global variable, it is not available for main. Hence an error.

  •     main(){

extern out;
printf("%d", out);
}
int out=100;
Answer:
100  
      Explanation:     
This is the correct way of writing the previous program.

No comments: