我正在做我的學校作業。在調試模式下,我想打開我的控制檯模式,並在發佈期間關閉控制檯。運行時間如何確定Visual Studio中的調試或發佈模式C++
我有嘗試marco按照推薦在stackoverflow但它不工作。我使用的Visual Studio 2012(空項目C++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
我正在做我的學校作業。在調試模式下,我想打開我的控制檯模式,並在發佈期間關閉控制檯。運行時間如何確定Visual Studio中的調試或發佈模式C++
我有嘗試marco按照推薦在stackoverflow但它不工作。我使用的Visual Studio 2012(空項目C++)
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
#if DEBUG
如果通過編譯器選項定義DEBUG
纔會工作。
默認情況下,DEBUG
未定義,但_DEBUG
是。嘗試#if defined(_DEBUG)
,或更改您的編譯器選項(通過項目屬性/配置屬性/ C/C++ /預處理器/預處理器定義)以定義DEBUG
。
嗨,我試過定義(_DEBUG),但它仍然無法正常工作。 #if defined(DEBUG)|定義(_DEBUG) – user2306421 2013-04-22 10:19:02
您能否解釋一些關於配置屬性的細節?我試圖讓DEBUG不會工作 – user2306421 2013-04-22 10:20:15
我能想到的是DEBUG = 1;在配置屬性下。不知道是否正確的做法 – user2306421 2013-04-22 10:26:52
#if DEBUG
將在編譯時自行解析,而不是在運行時解析。
NDEBUG
是在發佈模式下定義的非常標準的宏。 而我認爲Visual Studio在調試模式下定義了_DEBUG
宏。
在任何情況下,你可以在Visual Studio
轉到Project->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions
定義自己的宏在那裏,你可以在你所選擇的構建配置項目中添加宏。
從你的意見看來,你遇到的問題是獲得一個控制檯窗口打開並連接到stdout
(與DEBUG與RELEASE構建沒有多大關係)。
查看MS支持文章INFO: Calling CRT Output Routines from a GUI Application爲如何有一個GUI程序打開控制檯,並直接stdout
給它一個工作示例:
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
// ...
int hCrt;
FILE *hf;
AllocConsole();
hCrt = _open_osfhandle(
(long) GetStdHandle(STD_OUTPUT_HANDLE),
_O_TEXT
);
hf = _fdopen(hCrt, "w");
*stdout = *hf;
int i = setvbuf(stdout, NULL, _IONBF, 0);
puts("hello world");
其實,在進一步的測試,您的簡單使用freopen("CONOUT$","w",stdout);
工程技術太。出於某種原因,在我最初的測試中,它似乎沒有工作。您可能還需要撥打setvbuf()
以避免緩衝問題。
感謝MichaelBurr告訴我緩衝區問題。 – user2306421 2013-04-23 03:32:29
對於C#常量DEBUG工作正常,只要確保在項目屬性中啓用。
轉到項目屬性(通過在解決方案資源管理器中右鍵單擊您的項目),然後選擇窗口右側的構建選項並檢查定義的DEBUG常量複選框。
然後你可以使用這樣的代碼。
#if DEBUG
// debug mode
#else
//release mode
#endif
c#在哪裏? – marsh 2016-09-13 17:18:06
它是如何工作的?你是否收到編譯時錯誤?它是否對發佈版本或調試版本做同樣的事情?什麼? – 2013-04-22 08:28:16
不知道爲什麼。在我的DEBUG裏面包含了if(AllocConsole()) freopen(「CONOUT $」,「w」,stdout); – user2306421 2013-04-22 08:30:12
我沒有任何編譯時錯誤。我是否必須在可視化項目中設置任何屬性? – user2306421 2013-04-22 08:35:30