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

问题描述 投票:0回答:2

在我的项目中,程序可以做两件事中的一件事,但不能同时做两件事,所以我决定对一个类能做的最好的事情就是根据 #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
。我该怎么做?

c++ c-preprocessor preprocessor
2个回答
21
投票

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

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

2
投票

C23

C++23
 起,
#elifdef#elifndef 得到正式支持。

但这些标准尚未发布(截至 2023 年 7 月),新功能尚未被编译器广泛采用,因此目前您最好使用

#if defined()

© www.soinside.com 2019 - 2024. All rights reserved.