警告我要聲明一個調試標誌開啓或關閉這些兩種方式:定義給在C++
#define inDebugMode true
或
const bool inDebugMode = true;
在Visual Studio 2010中的編譯器總是發出警告:
warning C4127: conditional expression is constant
這是爲什麼?我如何正確地聲明它?
在此先感謝。
警告我要聲明一個調試標誌開啓或關閉這些兩種方式:定義給在C++
#define inDebugMode true
或
const bool inDebugMode = true;
在Visual Studio 2010中的編譯器總是發出警告:
warning C4127: conditional expression is constant
這是爲什麼?我如何正確地聲明它?
在此先感謝。
在沒有看到代碼,我懷疑你有下面的結構:
if (inDebugMode)
{
}
這將永遠是true
,因此警告。
推薦使用預處理器,而不是if
:
#define inDebugMode 1
#if inDebugMode
#endif
這將刪除警告並防止調試代碼被編譯不需要的時候。請注意,您還可以通過編譯器開關/D
指定宏的值:
cl.exe /DinDebugMode=1 ...
,但你需要確保你重建所有來源,如果你選擇的命令行選項,而不僅僅是改變來源。
如果你希望那樣使用'#if'而不是'#ifdef'當您將該值更改爲0時爲'false'。 –
@RoeeGavirel,是的,謝謝你和更新的答案。 – hmjd
此警告不是爲了定義而是爲了使用它。
可以說你在你的代碼是這樣寫的:
if (inDebugMode)
{
//your code
}
當編譯器遇到它(預編譯後的情況下的定義),這始終是真實的,有它認爲「如果」是沒有必要的。這只是一個警告,不是一個錯誤。
爲了避免它,你可以做這樣的:
#define inDebugMode 1
//some code
#if inDebugMode
//your code you only want to run in debug
#endif
這種方式,如果你不是在調試「#如果」部分中的所有代碼將被預編譯器省略,編譯器不會有一個問題。
如果您不喜歡預處理器指令並希望使用const bool,那麼您可以直接禁用「警告C4127」(Project Properties/C/C++/Advanced/Disable Specific Warnings/type「4127」)。
檢查了這一點:http://msdn.microsoft.com/en-us/library/6t66728h(v=vs.80).aspx – kol