Introduction / Context:
In multi-file C/C++ projects, header files commonly contain 'extern' declarations of globals. Understanding how 'extern' changes the meaning of a statement prevents multiple-definition linker errors while allowing many translation units to reference the same variable defined elsewhere.
Given Data / Assumptions:
- The line in question is 'extern int i;' with no initializer.
- We are discussing a global-scope variable, not a function.
- Standard C/C++ linkage rules apply.
Concept / Approach:
- A declaration introduces a name and its type. Using 'extern' for an object declares it without defining (allocating storage for) it.
- A definition for a global object allocates storage. Example: 'int i;' or 'int i = 0;'.
- Exactly one definition with external linkage must appear across the program, while declarations can appear in multiple files.
Step-by-Step Solution:
Classify 'extern int i;' → declaration only (no storage allocated).Recognize that definition would be 'int i;' (or with initialization) in exactly one source file.Thus, the statement is a declaration.
Verification / Alternative check:
Placing 'extern int i;' in a header included in many files compiles; the program links only if one file defines 'int i;' once.
Why Other Options Are Wrong:
- Definition: Would allocate storage; our line does not.
- Function: We are not declaring a function here.
- Error: The statement is valid; it simply declares an external symbol.
Common Pitfalls:
- Putting a definition (without extern) in a header causes multiple definitions during linking.
- Confusing 'extern' on variables with function declarations where 'extern' is redundant.
Final Answer:
Declaration
Discussion & Comments