C++: Preprocessor: #ifdef and #ifndef
The #ifdef (if defined) and #ifndef (if not defined)
preprocessor commands are used to
test if a preprocessor variable has been "defined". There are
two common uses for this, with slightly different patterns.
Prevent multiple definitions in header files
When there definitions in a header file that can not be made twice,
the code below should be used.
A header file may be included twice because more than one other
include file includes it, or an included file includes it and the
source file includes it again.
To prevent bad effects from a double include, it is common to surround the
body in the include file with the following (where MYHEADER_H is replaced by a varable name
that is appropriate for your program).
#ifndef MYHEADER_H
#define MYHEADER_H
. . . // This will be seen by the compiler only once
#endif /* MYHEADER_H */
Turning debugging code off and on
Debugging code is necessary in programs, however, it is not usually appropriate
to leave it in the delivered code. The preprocessor #ifdef commmand can surround
the debugging code. If DEBUG is defined as below (probably in an include file)
all debugging statement surrounded by the #ifdef DEBUG statement will be active.
However, if it isn't defined, none of the statements will make it thru the
preprocessor.
#define DEBUG
. . .
#ifdef DEBUG
. . . // debugging output
#endif