Introduction / Context:
Developers frequently separate function declarations from definitions across header and source files. In that workflow, you often see forms like 'extern int fun();' or simply 'int fun();'. This problem tests your understanding of linkage and what these two declarations actually mean in C/C++ when no function body is provided.
Given Data / Assumptions:
- Two lines appear without a function body: 'extern int fun();' and 'int fun();'.
 - No parameter list details are given (just empty parentheses).
 - We are reasoning about declarations, not definitions.
 
Concept / Approach:
- For functions, the storage class 'extern' is the default; a function declaration without 'static' or 'inline' already has external linkage.
 - Therefore, writing 'extern int fun();' versus 'int fun();' communicates the same linkage and does not allocate storage or provide a body.
 - A definition would be 'int fun() { /* body */ }' and it appears exactly once per program (per the One Definition Rule in C++).
 
Step-by-Step Solution:
Identify both statements as declarations (no body present).Recall: function declarations have external linkage by default unless otherwise specified (e.g., 'static').Conclude that adding 'extern' to a function declaration is redundant; the two lines are semantically identical.
Verification / Alternative check:
Place each line in a header and compile with a definition in a .c/.cpp file. The program links and runs the same in both cases.
Why Other Options Are Wrong:
- No difference, except in another file: Location does not change the meaning; both are still declarations.
 - 'int fun();' is overridden by 'extern int fun();': There is no overriding in declarations; they are equivalent.
 - None of these / different linkage: Incorrect because both declare the same external linkage.
 
Common Pitfalls:
- Confusing function declarations with variable declarations ('extern int x;' behaves differently from 'int x;').
 - Assuming empty parentheses mean 'no parameters' in C; strictly, 'void' should be used in C to indicate no parameters (C++ treats it as no parameters).
 
Final Answer:
Both are identical 
			
Discussion & Comments