4.2.5 Elif
Один из распространённых случаев вложенных условных операторов используется для проверки более чем двух возможных альтернатив. Например, у вас может быть
#if X == 1 … #else /* X != 1 */ #if X == 2 … #else /* X != 2 */ … #endif /* X != 2 */ #endif /* X != 1 */
Другая условная директива, ‘#elif’, позволяет сократить это следующим образом:
#if X == 1 … #elif X == 2 … #else /* X != 2 and X != 1*/ … #endif /* X != 2 and X != 1*/
‘#elif’ расшифровывается как «иначе если». Как и ‘#else’, она ставится в середине условной группы и подразделяет её; она не требует соответствующего ‘#endif’ для себя. Как и ‘#if’, директива ‘#elif’ включает выражение, которое необходимо проверить. Текст, следующий за ‘#elif’, обрабатывается только в том случае, если исходное условие ‘#if’ не выполнилось, а условие ‘#elif’ выполняется.
В одной условной группе может быть более одной директивы ‘#elif’. Тогда текст после каждой директивы ‘#elif’ обрабатывается только в том случае, если условие ‘#elif’ выполняется после исходного ‘#if’ и все предыдущие директивы ‘#elif’ внутри него не выполнились.
‘#else’ разрешено после любого количества директив ‘#elif’, но ‘#elif’ не может следовать за ‘#else’.
© Free Software Foundation
Licensed under the GNU Free Documentation License, Version 1.3.
https://gcc.gnu.org/onlinedocs/gcc-8.5.0/cpp/Elif.html