私はWin32 DLLアプリケーションを持っています。デバッグ ビルドが選択されています。私はそのようなコードを書きました:
#if DEBUG
fflush(logFile);
#endif
しかしfflush(logFile);
、グレーアウトされているので、実行されないと思います。でも実行してほしい。デバッグDEBUG
シンボルが定義されていないということですか?VS2012 のどこで定義できますか?
私はWin32 DLLアプリケーションを持っています。デバッグ ビルドが選択されています。私はそのようなコードを書きました:
#if DEBUG
fflush(logFile);
#endif
しかしfflush(logFile);
、グレーアウトされているので、実行されないと思います。でも実行してほしい。デバッグDEBUG
シンボルが定義されていないということですか?VS2012 のどこで定義できますか?
プリプロセッサの定義は、スクリーンショットに示すようにプロジェクト設定で定義されます (_DEBUG
そこに注意してください)。
定義_DEBUG
されているかどうかを確認し、それをゼロと比較しないでください(定義が欠落している可能性があります)。あなたがしたい:
#if defined(_DEBUG)
また
#ifdef _DEBUG
既定では、Visual Studio C++ プロジェクトには_DEBUG
、デバッグ プロジェクト構成用に定義されたマクロがあります。値が になるので、または1
を使用してテストできます。#if
#ifdef
ただし、マクロはアンダースコアで始まることに注意してください。名前を使用する場合DEBUG
(その名前を使用する既存のコードがある場合)、自分でプロジェクト プロパティに追加する必要があります ( C/C++ | Preprocessor | Preprocessor definitions
)。または、すべての翻訳単位 (おそらくstdafx.h
)に含まれるヘッダーに次を配置できます。
#if _DEBUG
#undef DEBUG
#define DEBUG 1
#endif
すべてのプロジェクトには、Debug と Release の 2 つのビルドがあります。以下を使用して定義したかのように、デバッグ ビルドがDEBUG
定義されています。
#define DEBUG
これにより、コードが異なる方法で生成されます。コード (関数、クラスなど) の作成者は、デバッグを支援するために追加の診断機能を追加する場合があります。デバッグ ビルドはデバッグ専用であり、このビルド (つまり、デバッグ ビルドで生成された EXE) を顧客に提供しないでください。
DEBUG
シンボルが定義されていない別のビルドは、リリース ビルド用です。リリース ビルドは、コード レベル、コンパイラ設定レベル、およびリンカー レベルで最適化されたコード用です。最適化された実行可能ファイルを生成するために、診断、アサート、デバッグ支援機能のほとんどが無効になります。
上記のコードを書いた人は誰でも、同じことを念頭に置いて書いています。デバッグ ビルドが実行されている場合にのみ、ファイルをフラッシュします。#if
andをコメント#endif
化してfflush
行をコンパイルするか、Release ビルドを使用できます。それはすべてあなた次第です。