2.1. Making Sure a Header File Gets Included Only Once
Problem
You have a header file that is included by several other files. You want to make sure the preprocessor scans the declarations in the header file no more than once.
Solution
#define a macro in your header file, and include
only the contents of the header file if the macro hasn’t already
been defined. You can use this combination of the #ifndef, #define, and #endif preprocessor directives, as I did in Example 2-1:
#ifndef MYCLASS_H_ _ // #include guards #define MYCLASS_H_ _ // Put everything here... #endif // MYCLASS_H_ _
When the preprocessor scans this header file, one of the first things it will
encounter is the #ifndef directive and the symbol that
follows. #ifndef tells the preprocessor to continue
processing on the next line only if the symbol MYCLASS_H_
_ is not already defined. If it is already defined, then the preprocessor
should skip to the closing #endif. The line following
#ifndef defines MYCLASS_H_
_, so if this file is scanned by the preprocessor twice in the same
compilation, the second time MYCLASS_H_ _ is defined.
By placing all of your code in between the #ifndef and
#endif, you ensure that it is only read once during
the compilation process.
Discussion
If you don’t use this technique, which is called using include guards , you’ve probably already seen “symbol already defined” compilation errors that result from not taking a protective measure against multiple definitions. C++ does not allow you to define ...