assert(condition)
の呼び出しでコードをいっぱいにしました。デバッグバージョンでは、アサーションを利用してg++ -g
を使用します。驚いたことに、-g
オプションなしでコンパイルされたリリースバージョンでもアサーションが動作しているのがわかります。
アサーションをコンパイル時に完全に無効にするにはどうすればよいですか?デバッグ、リリース、またはその他のものであっても、作成するビルドでNDEBUG
を明示的に定義する必要がありますか?
絶対です #define NDEBUG
(またはフラグ-DNDEBUG
with g ++)これは、アサートヘッダーファイルを含める前に定義されている限り、アサートを無効にします。
#define NDEBUG
を使用
7.2診断
1ヘッダーはassertマクロを定義し、別のマクロを参照します。
[〜#〜] ndebug [〜#〜]
<assert.h>
で定義されていません。 [〜#〜] ndebug [〜#〜]が含まれるソースファイル内のポイントでマクロ名として定義されている場合、assert マクロは単純に次のように定義されます
#define assert(ignore) ((void)0)
assertマクロは、
<assert.h>
が実行されるたびに、[〜#〜] ndebug [〜#〜]の現在の状態に従って再定義されます。含まれています。
次の方法でアサーションを完全に無効にすることができます
#define NDEBUG
#include <assert.h>
または、生産バージョンと開発バージョンのどちらを使用するかに応じて、メイクファイル/ビルド手順でNDEBUGを(-DNDEBUGを介して)設定できます。
-g
フラグはassert
の動作に影響を与えません。さまざまなデバッグシンボルが利用できることを保証するだけです。
NDEBUG
を設定することは、アサーションを無効にする標準的な方法(公式のISO標準)です。
はい、プリプロセッサ/コンパイラオプション-DNDEBUG
を使用して、コマンドライン/ビルドシステムでNDEBUG
を定義します。
これは、-g
によって挿入されたデバッグ情報とは関係ありません。