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 ’.