检查宏在 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。
我有一个宏,它只是一个常量值:
#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。