2017-10-17 79 views
-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代碼發揮預期。

現在,我不確定是否應該在這裏留下這個問題或刪除它。

+3

你可以用'constexpr'和'static_assert'代替嗎?我相信需要C++ 11。 –

+1

請發表[mcve]。 – melpomene

+3

按預期工作[here](http://coliru.stacked-crooked.com/a/69f2985d1399250e) – Jarod42

回答