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