2012-06-04 31 views
3

警告我要聲明一個調試標誌開啓或關閉這些兩種方式:定義給在C++

#define inDebugMode true 

const bool inDebugMode = true; 

在Visual Studio 2010中的編譯器總是發出警告:

warning C4127: conditional expression is constant 

這是爲什麼?我如何正確地聲明它?

在此先感謝。

+0

檢查了這一點:http://msdn.microsoft.com/en-us/library/6t66728h(v=vs.80).aspx – kol

回答

7

在沒有看到代碼,我懷疑你有下面的結構:

if (inDebugMode) 
{ 
} 

這將永遠是true,因此警告。

推薦使用預處理器,而不是if

#define inDebugMode 1 

#if inDebugMode 
#endif 

這將刪除警告並防止調試代碼被編譯不需要的時候。請注意,您還可以通過編譯器開關/D指定宏的值:

cl.exe /DinDebugMode=1 ... 

,但你需要確保你重建所有來源,如果你選擇的命令行選項,而不僅僅是改變來源。

+2

如果你希望那樣使用'#if'而不是'#ifdef'當您將該值更改爲0時爲'false'。 –

+0

@RoeeGavirel,是的,謝謝你和更新的答案。 – hmjd

3

此警告不是爲了定義而是爲了使用它。
可以說你在你的代碼是這樣寫的:

if (inDebugMode) 
{ 
    //your code 
} 

當編譯器遇到它(預編譯後的情況下的定義),這始終是真實的,有它認爲「如果」是沒有必要的。這只是一個警告,不是一個錯誤。
爲了避免它,你可以做這樣的:

#define inDebugMode 1 
//some code 
#if inDebugMode 
    //your code you only want to run in debug 
#endif 

這種方式,如果你不是在調試「#如果」部分中的所有代碼將被預編譯器省略,編譯器不會有一個問題。

1

如果您不喜歡預處理器指令並希望使用const bool,那麼您可以直接禁用「警告C4127」(Project Properties/C/C++/Advanced/Disable Specific Warnings/type「4127」)。