1

私はWin32 DLLアプリケーションを持っています。デバッグ ビルドが選択されています。私はそのようなコードを書きました:

#if DEBUG
fflush(logFile);
#endif

しかしfflush(logFile);、グレーアウトされているので、実行されないと思います。でも実行してほしい。デバッグDEBUGシンボルが定義されていないということですか?VS2012 のどこで定義できますか?

4

3 に答える 3

3

プリプロセッサの定義は、スクリーンショットに示すようにプロジェクト設定で定義されます (_DEBUGそこに注意してください)。

ここに画像の説明を入力

定義_DEBUGされているかどうかを確認し、それをゼロと比較しないでください(定義が欠落している可能性があります)。あなたがしたい:

#if defined(_DEBUG)

また

#ifdef _DEBUG

于 2012-11-28T08:22:05.373 に答える
2

既定では、Visual Studio C++ プロジェクトには_DEBUG、デバッグ プロジェクト構成用に定義されたマクロがあります。値が になるので、または1を使用してテストできます。#if#ifdef

ただし、マクロはアンダースコアで始まることに注意してください。名前を使用する場合DEBUG(その名前を使用する既存のコードがある場合)、自分でプロジェクト プロパティに追加する必要があります ( C/C++ | Preprocessor | Preprocessor definitions)。または、すべての翻訳単位 (おそらくstdafx.h)に含まれるヘッダーに次を配置できます。

#if _DEBUG
#undef DEBUG
#define DEBUG 1
#endif
于 2012-11-28T08:46:30.010 に答える
0

すべてのプロジェクトには、Debug と Release の 2 つのビルドがあります。以下を使用して定義したかのように、デバッグ ビルドがDEBUG定義されています。

#define DEBUG

これにより、コードが異なる方法で生成されます。コード (関数、クラスなど) の作成者は、デバッグを支援するために追加の診断機能を追加する場合があります。デバッグ ビルドはデバッグ専用であり、このビルド (つまり、デバッグ ビルドで生成された EXE) を顧客に提供しないでください。

DEBUGシンボルが定義されていない別のビルドは、リリース ビルド用です。リリース ビルドは、コード レベル、コンパイラ設定レベル、およびリンカー レベルで最適化されたコード用です。最適化された実行可能ファイルを生成するために、診断、アサート、デバッグ支援機能のほとんどが無効になります。

上記のコードを書いた人は誰でも、同じことを念頭に置いて書いています。デバッグ ビルドが実行されている場合にのみ、ファイルをフラッシュします。#ifandをコメント#endif化してfflush行をコンパイルするか、Release ビルドを使用できます。それはすべてあなた次第です。

于 2012-11-28T08:03:47.417 に答える