学校の宿題をやっています。デバッグ モード中にコンソール モードをオンにし、リリース中にコンソールをオフにしたいと考えています。
スタックオーバーフローで推奨されているようにマルコを試しましたが、機能していません。Visual Studio 2012 (空のプロジェクト c++) を使用しています
#if DEBUG
//doing something
#else
//Release mode doing something
#endif
学校の宿題をやっています。デバッグ モード中にコンソール モードをオンにし、リリース中にコンソールをオフにしたいと考えています。
スタックオーバーフローで推奨されているようにマルコを試しましたが、機能していません。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
。
#if DEBUG
実行時ではなくコンパイル時に解決されます。
NDEBUG
リリースモードで定義された非常に標準的なマクロです。_DEBUG
そして、Visual Studio はデバッグ モードでマクロを定義すると思います。
いずれにせよ、Visual Studio で独自のマクロを定義できます。
そこに移動しProject->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitions
て、選択したビルド構成にプロジェクトのマクロを追加できます。
あなたのコメントから、あなたが遭遇している問題は、コンソールウィンドウを開いて接続しているようstdout
です (DEBUG ビルドと RELEASE ビルドとはほとんど関係ありません)。
MS サポート記事INFO: Calling CRT Output Routines from a GUI Applicationを参照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()
バッファリングの問題を回避するために、呼び出しも必要になる場合があります。
C# の場合、定数 DEBUG は正常に機能します。プロジェクトのプロパティで有効になっていることを確認してください。
プロジェクトのプロパティに移動し (ソリューション エクスプローラーでプロジェクトを右クリックして)、ウィンドウの右側にあるビルド オプションを選択し、DEBUG 定数の定義チェックボックスをオンにします。
次に、このようなコードを使用できます。
#if DEBUG
// debug mode
#else
//release mode
#endif