2011-10-10 36 views
8

Visual Studio 2008のvC++でのDEBUGと_DEBUGの違いは何ですか?私のプロジェクトでは、一部のモジュールのプリプロセッサでDEBUGがあり、一部のモジュールで_DEBUGなので違いがあります。DEBUG vs _DEBUG

+0

関連:['_DEBUG'対NDEBUG'](http://stackoverflow.com/questions/2290509/) –

答えて

5

独自のコードでは、どのマクロを使用するかは問題ではありません。

ただし、使用するライブラリの動作が異なる場合があります。例えば。 assertに関するMSDNドキュメント

アサーションステートメントは、_DEBUGが定義されている場合にのみコンパイルされます。 _DEBUGが定義されていない場合、コンパイラはアサーションをヌル文として扱います。

ですから、常に_DEBUGを使用することをお勧めします。

編集:MSDNによると、あなたも、あなたがデバッグランタイムライブラリを指定すると、コンパイラはできるだけ早くあなたのためにそれを行いますので、特別なデバッグマクロを定義する必要はありません。

2

実際に定義されているマクロの使用方法によって異なります。私が知っているように、デフォルトのVS2008 C++プロジェクトにはデバッグ設定用に_DEBUGが定義されています。あなたのプロジェクトにはカスタムDEBUGマクロも定義されているかもしれません。 DEBUG定義を検索してみてください。

デフォルトでは、常に_DEBUGを使用する必要があります。

1

プロジェクトのコード生成設定が "debug"のものであれば、_DEBUGマクロはコンパイラによって定義されます。 対応するコンパイラオプションは /MDDマルチスレッドDLL、libcに動的リンク、DEBUG /MLdをシングルスレッドのlibcに静的リンケージ、DEBUG(VC6) /MTdにマルチスレッド、libcに静的リンケージ、DEBUG

ありますコンパイラオプション/ LDdも_DEBUGマクロを定義します。

DEBUGマクロは、しばしばDebug-Project-Settingで明示的に定義されます。