The C Preprocessor: Elif

Previous: Else, Up: Conditional Syntax [Contents][Index]

#### 4.2.5 Elif

One common case of nested conditionals is used to check for more than two possible alternatives. For example, you might have

    #if X == 1
    …
    #else /* X != 1 */
    #if X == 2
    …
    #else /* X != 2 */
    …
    #endif /* X != 2 */
    #endif /* X != 1 */

Another conditional directive, ‘`#elif`’, allows this to be abbreviated as follows:

    #if X == 1
    …
    #elif X == 2
    …
    #else /* X != 2 and X != 1*/
    …
    #endif /* X != 2 and X != 1*/

‘`#elif`’ stands for “else if”. Like ‘`#else`’, it goes in the middle of a conditional group and subdivides it; it does not require a matching ‘`#endif`’ of its own. Like ‘`#if`’, the ‘`#elif`’ directive includes an expression to be tested. The text following the ‘`#elif`’ is processed only if the original ‘`#if`’-condition failed and the ‘`#elif`’ condition succeeds.

More than one ‘`#elif`’ can go in the same conditional group. Then the text after each ‘`#elif`’ is processed only if the ‘`#elif`’ condition succeeds after the original ‘`#if`’ and all previous ‘`#elif`’ directives within it have failed.

‘`#else`’ is allowed after any number of ‘`#elif`’ directives, but ‘`#elif`’ may not follow ‘`#else`’.