#include <stdio.h>
int main() {
#ifdef FEATURE_A
#ifdef FEATURE_B
#ifdef FEATURE_C
printf("执行路径1:FEATURE_A、FEATURE_B、FEATURE_C都定义,输出此信息。\n");
#else
printf("执行路径2:FEATURE_A、FEATURE_B定义,FEATURE_C未定义,输出此信息。\n");
#endif
#else
#ifdef FEATURE_D
printf("执行路径3:FEATURE_A定义,FEATURE_B未定义,FEATURE_D定义,输出此信息。\n");
#else
printf("执行路径4:仅FEATURE_A定义,FEATURE_B、FEATURE_D未定义,输出此信息。\n");
#endif
#endif
#else
printf("未定义FEATURE_A,其他宏定义均不生效,输出此信息。\n");
#endif
return 0;
}
- 执行路径1:当定义了
FEATURE_A
、FEATURE_B
、FEATURE_C
时,会输出 “执行路径1:FEATURE_A、FEATURE_B、FEATURE_C都定义,输出此信息。”。因为在#ifdef FEATURE_A
下,#ifdef FEATURE_B
也成立,接着#ifdef FEATURE_C
也成立,所以会执行相应的printf
语句。
- 执行路径2:当定义了
FEATURE_A
、FEATURE_B
,但未定义FEATURE_C
时,#ifdef FEATURE_A
和#ifdef FEATURE_B
成立,而#ifdef FEATURE_C
不成立,所以会执行#else
分支的printf
语句,输出 “执行路径2:FEATURE_A、FEATURE_B定义,FEATURE_C未定义,输出此信息。”。
- 执行路径3:当定义了
FEATURE_A
,未定义FEATURE_B
,但定义了FEATURE_D
时,#ifdef FEATURE_A
成立,#ifdef FEATURE_B
不成立,然后在其#else
分支中#ifdef FEATURE_D
成立,所以执行相应printf
语句,输出 “执行路径3:FEATURE_A定义,FEATURE_B未定义,FEATURE_D定义,输出此信息。”。
- 执行路径4:当仅定义了
FEATURE_A
,未定义FEATURE_B
和FEATURE_D
时,#ifdef FEATURE_A
成立,#ifdef FEATURE_B
不成立,在其#else
分支中#ifdef FEATURE_D
也不成立,所以执行其#else
分支的printf
语句,输出 “执行路径4:仅FEATURE_A定义,FEATURE_B、FEATURE_D未定义,输出此信息。”。
- 默认情况:当未定义
FEATURE_A
时,最外层#ifdef FEATURE_A
不成立,执行#else
分支的printf
语句,输出 “未定义FEATURE_A,其他宏定义均不生效,输出此信息。”。