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
’.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-5.4.0/cpp/Elif.html