In C, when a local variable shadows a global of the same name, which value prints? #include int X = 40; // global int main() { int X = 20; // local shadowing global printf("%d ", X); return 0; }

C Programming Declarations and Initializations Difficulty: Easy
Choose an option
  • A
    20
  • B
    40
  • C
    Error
  • D
    No Output
  • E
    Implementation-defined

Answer

Correct Answer: 20

Explanation

Introduction / Context:Identifier shadowing occurs when a local identifier has the same name as a global one. Understanding name lookup and scope rules is critical to avoiding subtle bugs.

Given Data / Assumptions:

  • A global int X = 40;
  • A local int X = 20; inside main()
  • printf("%d", X); within the function scope.

Concept / Approach:In C, the innermost scope wins. The local variable with the same name hides (shadows) the global within that block. Therefore, any unqualified reference to X inside main() refers to the local value 20.

Step-by-Step Solution:Lookup X in current scope: finds local 20.Global X is hidden within this function block.Prints 20.

Verification / Alternative check:If you removed or renamed the local X, the output would be 40. Another way to access the global (in C) is to move printing to a helper function without a local shadow.

Why Other Options Are Wrong:B: That is the global, but it is shadowed. C/D/E: No errors, and output is deterministic per C scope rules.

Common Pitfalls:Assuming the global has priority; forgetting that shadowing can confuse code readers—use distinct names to avoid ambiguity.

Final Answer:20

Discussion & Comments
No comments yet. Be the first to comment!
Join Discussion