Difficulty: Easy
Correct Answer: Hello
Explanation:
Introduction / Context:
This problem checks knowledge of default initialization for global variables in C and the effect on loop execution. It also includes a recursive call to main(), but that code path is guarded by the loop condition.
Given Data / Assumptions:
Concept / Approach:
In C, global (static storage duration) variables are initialized to 0 if not explicitly initialized. Therefore, i == 0 at program start. The while loop condition is false immediately, so the loop body (including fun() and the recursive call to main()) does not execute.
Step-by-Step Solution:
Initialize i = 0 (by default).Evaluate while(i) → while(0) → condition false → skip body.Execute printf("Hello\n").Program terminates normally.
Verification / Alternative check:
If you explicitly set i = 1 before the loop, the loop would run and call main() recursively, risking non-termination. Since i is 0, none of that occurs.
Why Other Options Are Wrong:
“Hi Hello” would require entering the loop to print “Hi”. “No output” is false because “Hello” prints. “Infinite loop” would require i to be nonzero. There is no compile-time error for calling main recursively (though it is poor style).
Common Pitfalls:
Assuming uninitialized globals are garbage; they are zeroed. Confusing this with local automatic variables that are indeterminate if not initialized.
Final Answer:
Hello
Discussion & Comments