5

学校の宿題をやっています。デバッグ モード中にコンソール モードをオンにし、リリース中にコンソールをオフにしたいと考えています。

スタックオーバーフローで推奨されているようにマルコを試しましたが、機能していません。Visual Studio 2012 (空のプロジェクト c++) を使用しています

#if DEBUG
 //doing something
#else
 //Release mode doing something
#endif
4

5 に答える 5

13

#if DEBUGDEBUGコンパイラ オプションを介して定義した場合にのみ機能します。

デフォルトでDEBUGは、 は定義されていませんが、定義されてい_DEBUGます。を試す#if defined(_DEBUG)か、コンパイラ オプションを変更して (プロジェクト プロパティ / 構成プロパティ / C/C++ / プリプロセッサ / プリプロセッサ定義を介して) を定義しますDEBUG

于 2013-04-22T08:38:28.620 に答える
1

#if DEBUG実行時ではなくコンパイル時に解決されます。

NDEBUGリリースモードで定義された非常に標準的なマクロです。_DEBUGそして、Visual Studio はデバッグ モードでマクロを定義すると思います。

いずれにせよ、Visual Studio で独自のマクロを定義できます。

そこに移動しProject->Properties->Configuration Properties->C/C++->Preprocessor -> Preprocessor Definitionsて、選択したビルド構成にプロジェクトのマクロを追加できます。

于 2013-04-22T08:39:24.963 に答える
0

あなたのコメントから、あなたが遭遇している問題は、コンソールウィンドウを開いて接続しているよう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()バッファリングの問題を回避するために、呼び出しも必要になる場合があります。

于 2013-04-22T09:04:14.027 に答える
-1

C# の場合、定数 DEBUG は正常に機能します。プロジェクトのプロパティで有効になっていることを確認してください。

プロジェクトのプロパティに移動し (ソリューション エクスプローラーでプロジェクトを右クリックして)、ウィンドウの右側にあるビルド オプションを選択し、DEBUG 定数の定義チェックボックスをオンにします。

次に、このようなコードを使用できます。

#if DEBUG

// debug mode

#else

//release mode

#endif
于 2014-03-14T05:53:25.983 に答える