我有Win32 DLL應用程序。調試版本被選中。我寫了這樣的代碼:哪裏可以定義VS2012中Debug版本的DEBUG符號?
#if DEBUG
fflush(logFile);
#endif
但fflush(logFile);
是灰色的,所以我認爲它不會被執行。 但我希望它被執行。這是否意味着在調試DEBUG
符號沒有定義?我在哪裏可以在VS2012中定義它?
我有Win32 DLL應用程序。調試版本被選中。我寫了這樣的代碼:哪裏可以定義VS2012中Debug版本的DEBUG符號?
#if DEBUG
fflush(logFile);
#endif
但fflush(logFile);
是灰色的,所以我認爲它不會被執行。 但我希望它被執行。這是否意味着在調試DEBUG
符號沒有定義?我在哪裏可以在VS2012中定義它?
預處理器定義下的項目設置中定義的屏幕截圖如圖所示(請注意_DEBUG
那裏):
注意,在_DEBUG
情況下,你要檢查它是否在所有的定義,而不是比較它(可能缺少定義)爲零。你想:
#if defined(_DEBUG)
或
#ifdef _DEBUG
每個項目都有兩個版本:Debug和Release。調試版本已經DEBUG
定義,因爲如果你使用定義:
#define DEBUG
它使,得到不同的生成的代碼。代碼的編寫者(函數,類等)可能會增加額外的對角線以幫助調試。 Debug構建僅用於調試,並且不會將此構建(即,使用Debug構建生成的EXE)提供給客戶。
另一個版本,其中DEBUG
符號未定義,用於發佈版本。發佈版本用於優化代碼,代碼級別,編譯器設置級別和鏈接器級別。大多數diagonistic,斷言,調試輔助功能將被禁用 - 以便生成優化的可執行文件。
無論誰寫了上面的代碼,都寫了同樣的事情。只有在調試版本正在運行時才允許刷新文件。你可以評論#if
和#endif
,並且讓fflush
行被編譯,或者你可以使用Release build。這一切都取決於你。
默認情況下,Visual Studio的C++項目將有一個調試項目配置定義的宏_DEBUG
。它將具有值1
,因此您可以使用#if
或#ifdef
進行測試。
但要注意,在宏開始用下劃線 - 如果你想使用(使用該名字也許你現有的代碼)這個名字DEBUG
,你需要將它添加到項目屬性自己(C/C++ | Preprocessor | Preprocessor definitions
)。或者你可以把下面在隨機配備在每一個翻譯單元(也許stdafx.h
)頭:
#if _DEBUG
#undef DEBUG
#define DEBUG 1
#endif
使用'#如果_DEBUG'是好的 - 它被默認爲'1'。 –