Difficulty: Easy
Correct Answer: The default arguments are given in the function prototype and should be repeated in the function definition.
Explanation:
Introduction / Context:
Where you place default arguments affects readability and linkage. The language allows specifying defaults in a declaration; repeating them in multiple places leads to maintenance hazards and can violate the One Definition Rule (ODR) when headers and sources disagree.
Given Data / Assumptions:
Concept / Approach:
The standard practice is to specify default arguments exactly once—typically in the function prototype (declaration) in a header. They should not be repeated in the out-of-line definition; doing so duplicates information and can cause inconsistencies if values diverge across translation units.
Step-by-Step Solution:
1) Place defaults in a header: void f(int x = DefaultX);2) Define without repeating: void f(int x) { /* ... */ }3) The compiler uses the declaration to substitute missing arguments at call sites.4) Repeating defaults in the definition is discouraged/incorrect and may be ill-formed if it conflicts.
Verification / Alternative check:
Inspect any standard library header: defaults appear in declarations (e.g., ios flags manipulators). Out-of-line definitions omit default values.
Why Other Options Are Wrong:
Global constants as default values are fine.Defaults in the prototype are correct and conventional.The compiler indeed builds calls from the prototype information at the call site.
Common Pitfalls:
Putting different default values in multiple declarations across translation units, causing surprising behavior depending on which declaration a file sees.
Final Answer:
The default arguments are given in the function prototype and should be repeated in the function definition.
Discussion & Comments