#if constant-expression
#ifdef identifier
#ifndef identifier
elif-parts :
elif-line text
elif-parts elif-line text
elif-line :
#elif constant-expression
else-part :
else-line text
else-line :
#else
endif-line :
#endif
- 源文件中的每个 #if 指令必须与表示结束的 #endif 指令匹配。任意数量的 #elif 指令可以出现在 #if 和 #endif 指令之间,但最多允许一个 #else 指令。 #else 指令(如果有)必须是 #endif 之前的最后一个指令。
- #if、#elif、#else 和 #endif 指令可以嵌套在其他 #if 指令的文本部分中。 每个嵌套的 #else、#elif 或 #endif 指令属于最靠近的前面的 #if 指令。
#if DLEVEL > 5 #define SIGNAL 1 #if STACKUSE == 1 #define STACK 200 #else #define STACK 100 #endif #else #define SIGNAL 0 #if STACKUSE == 1 #define STACK 100 #else #define STACK 50 #endif #endif #if DLEVEL == 0 #define STACK 0 #elif DLEVEL == 1 #define STACK 100 #elif DLEVEL > 5 display( debugptr ); #else #define STACK 200 #endif
第一个 #if 块显示两组嵌套的 #if、#else 和 #endif 指令。 仅当 DLEVEL > 5 为 true 时,才会处理第一组指令。 否则,处理 #else 后面的语句。
第二个示例中的 #elif 和 #else 指令用于根据 DLEVEL 的值做出四种选择之一。 将常量 STACK 设置为 0、100 或 200,具体取决于 DLEVEL 的定义。 如果 DLEVEL 大于 5,则编译