Quantcast
Viewing all articles
Browse latest Browse all 11

Preprocessor – the #else Directive

#else is one of five preprocessor selection statements allowing selection of alternative sections of code for compilation. The other four selection statements are: #ifdef, #ifndef, #if, and #elif.

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

Purpose

The #else directive provides a final alternative for a preprocessor selection block. If all previous selection options fail, then the code found between the #else and #endif is compiled.

Format

#if or #ifdef or #ifndef

preprocessor or code statements

#elif controlling_expression (optional)

preprocessor or code statements

#else

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 else, but not escape characters or other symbols or macros. The preprocessor removes white space and concatenates the # and else together.

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

The following are valid uses:

#else  
#   else   
# /* comments are white space */ else

The following are invalid uses:

// #\ is not a valid preprocessor directive
# \t else

// #" is not a valid preprocessor directive
# "" else

// malformed because only white space may follow #else
#else MY_MACRO

Use

The #else must appear as the last alternative in a preprocessor selection block. If all the preceding selection options fail, then the code contained between the #else and closing #endif is compiled.

The statements following the #else may be language statements or preprocessor statements. There is no limit on the nesting of preprocessor directives or statements.

 #ifdef MY_MACRO
.
.
.
// these statements will only be compiled if MY_MACRO exists
.
.
.
#else
.
.
.
// these statements will only be compiled if MY_MACRO does not exist
.
.
.
#endif

Please consider sharing this article if you liked it or found it useful.

You may use one of the buttons below or share using your own favourite media.

Please do not republish this article on your website. You may publish a short excerpt and provide a link back to the original article.


Viewing all articles
Browse latest Browse all 11

Trending Articles