More C++ Idioms/Include Guard Macro
From Wikibooks, the open-content textbooks collection
Contents |
[edit]
Include Guard Macro
[edit] Intent
To prevent inclusion of a header file multiple times.
[edit] Also Known As
[edit] Motivation
Including the same header file in same compilation unit is a problem because it violates a basic rule of C++: One Definition Rule (ODR). A header may get included multiple times because of direct and indirect inclusion.
[edit] Solution and Sample Code
Include Guard macro idiom is an old idiom, which is also applicable in a C program. It used simple #define to prevent inclusion of a header file multiple times in a compilation unit. Following macros are put at the very beginning and at very end of a header file.
#ifndef __MYHEADER_H // beginning #define __MYHEADER_H ... #endif // __MYHEADER_H // end
Note that programmers often have their include guard macro's start with one or more underscores, followed by uppercase letters, even though such identifiers are officially reserved for the implementation of the compiler and the Standard Library, according to the C++ Standard (ISO/IEC 14882:2003).
Some compiler support
#pragma once
as an efficient alternative to include guards. It does not require to open the header file more than once, unlike traditional include guard macro in some compilers. On many modern compilers like GCC4 or MSC++2008 #pragma once will not give better compile time performance as they recognize header guards.
[edit] Known Uses
Virtually all header files in the world!
[edit] Related Idioms
[edit] References
#pragma once in Wikipedia.