2012-11-28 62 views
1

我有Win32 DLL應用程序。調試版本被選中。我寫了這樣的代碼:哪裏可以定義VS2012中Debug版本的DEBUG符號?

#if DEBUG 
fflush(logFile); 
#endif 

fflush(logFile);是灰色的,所以我認爲它不會被執行。 但我希望它被執行。這是否意味着在調試DEBUG符號沒有定義?我在哪裏可以在VS2012中定義它?

回答

3

預處理器定義下的項目設置中定義的屏幕截圖如圖所示(請注意_DEBUG那裏):

enter image description here

注意,在_DEBUG情況下,你要檢查它是否在所有的定義,而不是比較它(可能缺少定義)爲零。你想:

#if defined(_DEBUG)

#ifdef _DEBUG

+1

使用'#如果_DEBUG'是好的 - 它被默認爲'1'。 –

0

每個項目都有兩個版本:Debug和Release。調試版本已經DEBUG定義,因爲如果你使用定義:

#define DEBUG 

它使,得到不同的生成的代碼。代碼的編寫者(函數,類等)可能會增加額外的對角線以幫助調試。 Debug構建僅用於調試,並且不會將此構建(即,使用Debug構建生成的EXE)提供給客戶。

另一個版本,其中DEBUG符號未定義,用於發佈版本。發佈版本用於優化代碼,代碼級別,編譯器設置級別和鏈接器級別。大多數diagonistic,斷言,調試輔助功能將被禁用 - 以便生成優化的可執行文件。

無論誰寫了上面的代碼,都寫了同樣的事情。只有在調試版本正在運行時才允許刷新文件。你可以評論#if#endif,並且讓fflush行被編譯,或者你可以使用Release build。這一切都取決於你。

2

默認情況下,Visual Studio的C++項目將有一個調試項目配置定義的宏_DEBUG。它將具有值1,因此您可以使用#if#ifdef進行測試。

但要注意,在宏開始用下劃線 - 如果你想使用(使用該名字也許你現有的代碼)這個名字DEBUG,你需要將它添加到項目屬性自己(C/C++ | Preprocessor | Preprocessor definitions)。或者你可以把下面在隨機配備在每一個翻譯單元(也許stdafx.h)頭:

#if _DEBUG 
#undef DEBUG 
#define DEBUG 1 
#endif 
相關問題