Preventing multiple inclusion of the same header – is there a standard way? Decide whether C provides mechanisms to avoid including a file twice.
-
ACorrect
-
BIncorrect
-
CPossible only with linker options
-
DPossible only in C++
-
ENone of the above
Answer
Correct Answer: Correct
Explanation
Introduction / Context:Multiple inclusion of the same header can produce redefinition errors and long compile times. This question asks whether C has a standard technique to prevent such duplicate inclusions.
Given Data / Assumptions:
- We consider standard-compliant C preprocessing.
- Common idioms like include guards are allowed.
Concept / Approach:The typical solution is an include guard using preprocessor conditionals at the top of a header file: #ifndef MY_HEADER_H#define MY_HEADER_H/* header content */#endif. Many compilers also support #pragma once as a non-standard but widely available alternative. These mechanisms ensure the header’s contents are processed only once per translation unit.
Step-by-Step Solution:Add a unique macro guard to the header.First inclusion defines the macro; later inclusions see it defined and skip contents.Compilation proceeds without multiple-definition issues.
Verification / Alternative check:Intentionally include the same header twice with and without guards and observe the difference in diagnostics.
Why Other Options Are Wrong:Incorrect — contradicted by standard practice. Linker options — linking occurs after compilation; it cannot prevent preprocessing duplicates. Only in C++ — C supports include guards equally.
Common Pitfalls:Using non-unique macro names for guards; mixing relative and angled includes causing unintended multiple inclusions of the same header with different paths.
Final Answer:Correct