检查宏在 C++ 中是否奇数

Check if macro is odd in c++

我有一个宏,它只是一个常量值:

#define THREAD_AT_DEPTH 13

如果我将该值设置为偶数,我想在编译时抛出错误。

#if (THREAD_AT_DEPTH % 2) == 0
#error THREAD_AT_DEPTH must be odd
#endif

不幸的是,THREAD_AT_DEPTH % 2 未在编译时求值,#error 始终有效。如果我将 THREAD_AT_DEPTH 更改为 13,我的 #if 指令将按预期工作。

有没有办法让定义的宏正确求值?

编辑:这个问题与我的代码不符。以上工作按预期进行。我没有意识到不起作用的代码正在使用

const int THREAD_AT_DEPTH = 13;

//...

#if (THREAD_AT_DEPTH % 2) == 1
//...

当我把它改成

#define THREAD_AT_DEPTH 13

我的 #if 指令按预期工作。

现在,我不确定是应该把这个问题留在这里还是删除它。

在 C++11 中,您可以为此使用 static_assert