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

Jon*_*aft 14 c++ preprocessor c-preprocessor

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

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

所以我可以做

#define CALC_MODE
Run Code Online (Sandbox Code Playgroud)

就在这之前。

如果需要的话我可以放弃使用static_assert。这个怎么做?

Adr*_*ica 20

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

#if defined(CALC_MODE)
    typedef MyCalcClass ChosenClass;
#elif defined(USER_MODE)
    typedef MyUserClass ChosenClass;
#else
    #error "Define CALC_MODE or USER_MODE"
#endif
Run Code Online (Sandbox Code Playgroud)

  • 是的,绝对不是一成不变的。我个人总是在 `sizeof` 和 `define` 上使用括号,只是因为它在我看来看起来更干净。两个阵营都有很多人。 (6认同)
  • @Eric 这是一个社区 Wiki,所以请随意编辑。然而,我认为您会发现 `sizeof Eric` *与* `sizeof(Eric)` 的使用比例接近 50:50。 (4认同)
  • `define` 是一个运算符,而不是像 `sizeof` 一样的函数,因此括号是不必要的,而且会造成混乱。最好让学生看到它是一个指示编译器执行某些操作的运算符,而不是它是一个被调用的函数。 (2认同)