Preprocessor – the #endif Directive

Behaviour of this preprocessor directive is the same for both C and C++ compilers.

Purpose

The #endif directive is used end / close / terminate a selection block (#if, #ifdef, or #ifndef.

Format

#if or #ifdef or #ifndef

preprocessor or code statements

#elif controlling_expression (optional)

preprocessor or code statements

#else (optional)

preprocessor or code statements

#endif

All preprocessor directives begin with the # symbol. It must be the first character on the line or the first character on the line following optional white space.

Some early compilers flagged an error if # was not the first character on the line.

Spaces or tabs are permitted between the # and endif, but not escape characters or other symbols or macros. The preprocessor removes white space and concatenates the # and endif together.

If anything follows the #endif directive (other than white space) then the program is malformed.

The following are valid uses:

#endif
#   endif
# /* comments are white space */ endif

The following are invalid uses:

// #\ is not a valid preprocessor directive
# \t endif
// #" is not a valid preprocessor directive
# "" endif
// malformed because only white space may follow #endif
#endif MY_MACRO

Use

The #endif must appear as the final statement of a preprocessor selection sequence.

#ifdef MY_MACRO

. . . // preprocessor or language statements . . .

#endif