私はいくつかのコードは、多くの場合、このようになっていることに気付きました:デバッグビルドとリリースビルドの間でコードを変更する必要がないようにゼロコストのassert()を使用することは可能ですか?
#ifdef DEBUG
assert(i == 1);
#endif //DEBUG
、あなたはこれらがあなたの生のコードの周りに座ってのいくつかのブロックを有することができます。各ブロックを書き出すことは面倒で面倒です。 DEBUGフラグが指定されていない場合、ゼロコストのアサートを取得するために
#ifdef DEBUG
auto debug_assert = [](bool expr) {
assert(expr);
};
#else //DEBUG
void debug_assert(bool expr) {}
#endif //DEBUG
:このような
auto debug_assert = [](auto expr) {
#ifdef DEBUG
assert(expr);
#endif //DEBUG
};
か何か:
このような機能を持つことがもっともらしいだろうか? (つまり、ラムダが実行されていないコードに入れられていない場合と同じ効果があり、g ++/clangコンパイラによって最適化されている必要があります)。
'NDEBUG'を定義することによって' 'から' assert'を無効にすることができます... –
* "コードはよくこのように見えます" * - しばしば?本当に? – IInspectable
アサーションを有効にした状態で出荷するには、多くの自信と勇気が必要です。そして、あなたがディセーブル・アサートで出荷する場合、私たちはテストしたものを出荷するので、ディセーブル・アサートでテストする必要があります。これらは、提供可能なソフトウェアにとって困難な問題です。 –