アサート付きのC++コードがあります。オプションを指定してコードをコンパイルすると、g++ -D NDEBUG
assertコマンドは実行されません。しかし、コードにNDEBUGを含めて、オプション#define NDEBUG
なしでコンパイルすると-D NDEBUG
、assertコマンドが実行されます。コマンドラインを変更せずにアサートを無効にするにはどうすればよいですか?
2708 次
2 に答える
9
NDEBUG
を定義するヘッダーを含める前に、を定義する必要がありますassert
。試す
#define NDEBUG
#include <assert.h>
でアサーションを無効にするソースファイルの上部にあります。
于 2012-12-28T15:09:57.670 に答える
3
を定義することによってNDEBUG
。-D NDEBUG
実際には、コマンドラインでコンパイルすることは決してありません
。独自のデバッグコマンドを定義する必要があります。プロファイラーが特定の関数でチェックを行う余裕がないことを示したら、関数を次のようにラップします。
// Non-critical code...
#ifdef MYDEBUGOFF
#define NDEBUG
#endif
#include <assert.h>
// Critical function
#undef NDEBUG
#include <assert.h>
// More non-critical code.
何度でも含めることができます<assert.h>
。その時点で定義されているassert
かどうかに応じてマクロを再定義するたびにNDEBUG
。だからあなたは心ゆくまで調整することができます。ヘッダーを含める前に、#define NDEBUG
または#undef NDEBUG
毎回。
于 2012-12-28T15:14:46.220 に答える