2

アサート付きのC++コードがあります。オプションを指定してコードをコンパイルすると、g++ -D NDEBUGassertコマンドは実行されません。しかし、コードにNDEBUGを含めて、オプション#define NDEBUGなしでコンパイルすると-D NDEBUG、assertコマンドが実行されます。コマンドラインを変更せずにアサートを無効にするにはどうすればよいですか?

4

2 に答える 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 に答える