web-dev-qa-db-ja.com

Visual Studioのデバッグ/リリース構成に従って自動#defines

私のプログラムには次のようなデバッグ出力があります:

#define DEBUG
...
#ifdef DEBUG
    std::cout << "[RE_words] " << m_re << std::endl;
#endif

DEBUGは私のプログラムで手動で定義されています。リリースバージョンを作成するときは、常にその行をコメントアウトします。 Visual Studioには、コンパイルに使用されるコマンドラインなどを処理するDebug vs Releaseバージョンの構成もあります。構成「デバッグ」を使用して、DEBUGをコンパイラに自動的に定義することもできますか?どうやって?

35
Felix Dombek

Visual Studioは、デバッグビルド(および非デバッグビルドのNDEBUG)の_DEBUGシンボルを自動的に定義します。

これを行う別の方法は、プロジェクト設定->構成プロパティ-> C/C++->プリプロセッサに移動し、プリプロセッサ定義を手動で編集することです。

こちらもご覧ください:
この回答 は、_DEBUGとNDEBUGの違いをより詳細に説明しています。
この回答 は、NDEBUGシンボルの目的と、規格で定義されているかどうかを説明しています。

68
Jan Holecek

使用する _DEBUG。 Visual C++は、これをデバッグ構成用に定義します。プロジェクトのプロパティダイアログでデバッグ構成のプリプロセッサディレクティブを確認します。

8
Moo-Juice

私もプリプロセッサプロパティを見て、_DEBUGを削除するだけでよいと考えました。 Visual Studioは、デバッグランタイムライブラリオプションのいずれかを選択した場合、_DEBUGを設定することで支援しようとします。

プロジェクトプロパティページConfiguration Properties\C/C++\Code Generationで選択されたオプションRuntime Libraryは、いくつかの定義に影響します。デバッグライブラリを選択する場合(/ MTdまたは/ MDd_ DEBUGdefineisセットする。

スイッチの詳細については、 MSDN/MD、/ MT ... を参照してください。これらのオプションに基づいて設定される#definesがいくつかあります。ヘッダーファイルをインクルードする前に、誰が#defineを設定するかを見つけようとすると、それらはほとんど見えません!!

3
Quijote

はい、プロジェクトオプションページのコンパイル->高度なコンパイルオプションを確認する必要があります。ただし、VSはデフォルトでデバッグモードのDEBUGディレクティブを自動的に定義します。

0