如何将 "else if" 与预处理器 #ifdef 一起使用?

How to use "else if" with the preprocessor #ifdef?

在我的项目中,程序可以做两件事中的一件,但不能同时做两件事,所以我决定我能做的最好的事 class 是根据 #define 预处理器变量来定义它。下面的代码可以向你展示我的想法,但你可以猜测它不起作用:

#ifdef CALC_MODE
typedef MyCalcClass ChosenClass;
#elifdef USER_MODE
typedef MyUserClass ChosenClass;
#else
static_assert(false, "Define CALC_MODE or USER_MODE");
#endif

所以我能做到

#define CALC_MODE

就在这之前。

如果需要,我可以放弃使用 static_assert。如何做到这一点?

这是一个主要基于对您的问题发表的评论的建议:

#if defined(CALC_MODE)
    typedef MyCalcClass ChosenClass;
#elif defined(USER_MODE)
    typedef MyUserClass ChosenClass;
#else
    #error "Define CALC_MODE or USER_MODE"
#endif