0

アサーションを無効にしたい場合は、NDEBUG を定義する必要がありますが、アサート ヘッダー ファイルを含める前に定義する必要があるのはなぜですか??
2 番目の質問: アサーションを無効にしてマクロ assert を使用するポイントは何ですか??

4

1 に答える 1

2

アサーションを無効にしたい場合は、NDEBUG を定義する必要がありますが、アサート ヘッダー ファイルを含める前に定義する必要があるのはなぜですか??

は、次のコード フラグメントと同様にassert定義されているためです。

#ifdef NDEBUG

#define assert(condition) ((void)0)
#else
#define assert(condition) /*implementation defined*/
#endif

NDEBUGこれで、条件が事前に定義されている場合にのみ真になります。

2 番目の質問: アサーションを無効にしてマクロ assert を使用するポイントは何ですか?

アサーションはランタイムにコストがかかります。リリースされた製品にそれらを保持したいが、それらをチェックしたくない。例えば:

auto a = b;
assert(a == b);

同等性テストに時間がかかる場合は、生産的な環境では避けたいものです。ただし、デバッグ/テスト中は、最初の行で元のオブジェクトと同じコピーが実際に生成されることを知っておくとよいでしょう。

全体assert()として、開発/デバッグ中に何かをアサートするために使用し、テスト中にこのアサーションが保持されている場合は、リリースのために安全に無効にすることができます。

于 2013-09-11T22:39:03.870 に答える