for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
デバッグしない場合 (NDEBUG
フラグ)、結果は空のfor
ループになります。これを処理するクリーンな方法はありますか (空のfor
ループを実行しないでください); assert
そもそもの目的を無効にするため、できればプリプロセッサ ディレクティブを使用しないでください。
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
デバッグしない場合 (NDEBUG
フラグ)、結果は空のfor
ループになります。これを処理するクリーンな方法はありますか (空のfor
ループを実行しないでください); assert
そもそもの目的を無効にするため、できればプリプロセッサ ディレクティブを使用しないでください。
inline bool all_positive(std::vector<int> const &x)
{
for (size_t i = 0; i < x.size(); i++)
if (x[i] <= 0)
return false;
return true;
}
それから
assert(all_positive(x));
(ただし、 が定義されていると、「未使用の関数」という警告が表示される場合NDEBUG
があります)。
優れたオプティマイザーは、 が定義されているときにループ全体を排除できるはずNDEBUG
です (私はちょうど私のものをテストしましたが、そうしています)。
#ifndef NDEBUG
または、ループ全体を/で囲むこともできます#endif
。あなたはこれを「assert
そもそもの目的を破るだろう」と言いますが、私はその理屈にはあまり従いません。
assert
NDEBUG
が定義されている場合、ステートメントはノーオペレーションになります。ループ全体で同様のことを行うには、次のようにします。
#ifndef NDEBUG
for(unsigned int i = 0; i < x.size(); i++)
assert(x[i] > 0);
#endif