-3
奇怪我有一個宏,僅僅是一個恆定值:檢查宏在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
代碼發揮預期。
現在,我不確定是否應該在這裏留下這個問題或刪除它。
你可以用'constexpr'和'static_assert'代替嗎?我相信需要C++ 11。 –
請發表[mcve]。 – melpomene
按預期工作[here](http://coliru.stacked-crooked.com/a/69f2985d1399250e) – Jarod42