检查c ++中的宏是否为奇数

时间:2017-10-17 17:04:44

标签: c++ directive

我有一个只是一个常数值的宏:

#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指令按预期工作。

现在,我不确定是否应该在此留下此问题或删除它。

1 个答案:

答案 0 :(得分:3)

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