# C++ Notes: 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 other include files include 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 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