директива — Проверьте, не является ли макрос нечетным в переполнении стека

У меня есть макрос, который является просто постоянным значением:

#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 Директива сработала как положено.

Теперь я не уверен, должен ли я оставить этот вопрос здесь или удалить его.

-3

Решение

В C ++ 11 вы можете использовать static_assert за это.

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector