MST

星途 面试题库

面试题:C语言#ifdef条件编译的嵌套与逻辑

编写一段C代码,要求至少有三层#ifdef条件编译的嵌套,并且通过不同的宏定义组合实现至少四种不同的代码执行路径,同时解释每一种宏定义组合下代码的执行逻辑。
15.5万 热度难度
编程语言C

知识考点

AI 面试

面试题答案

一键面试
#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. 执行路径1:当定义了FEATURE_AFEATURE_BFEATURE_C时,会输出 “执行路径1:FEATURE_A、FEATURE_B、FEATURE_C都定义,输出此信息。”。因为在#ifdef FEATURE_A下,#ifdef FEATURE_B也成立,接着#ifdef FEATURE_C也成立,所以会执行相应的printf语句。
  2. 执行路径2:当定义了FEATURE_AFEATURE_B,但未定义FEATURE_C时,#ifdef FEATURE_A#ifdef FEATURE_B成立,而#ifdef FEATURE_C不成立,所以会执行#else分支的printf语句,输出 “执行路径2:FEATURE_A、FEATURE_B定义,FEATURE_C未定义,输出此信息。”。
  3. 执行路径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. 执行路径4:当仅定义了FEATURE_A,未定义FEATURE_BFEATURE_D时,#ifdef FEATURE_A成立,#ifdef FEATURE_B不成立,在其#else分支中#ifdef FEATURE_D也不成立,所以执行其#else分支的printf语句,输出 “执行路径4:仅FEATURE_A定义,FEATURE_B、FEATURE_D未定义,输出此信息。”。
  5. 默认情况:当未定义FEATURE_A时,最外层#ifdef FEATURE_A不成立,执行#else分支的printf语句,输出 “未定义FEATURE_A,其他宏定义均不生效,输出此信息。”。