2010-11-26 21 views
1

私のようなものを持っている場合:私も主張したものと同一の呼び出しを使用していますので、私は別のFNCにこのFNC体の外に移動したいと思い アサートを呼び出す関数への呼び出しは、プログラムのリリース版で削除されますか?

static long double calcFactor_(const short mantissa, const short exponent,const short base = Derived::internals_.base_) 
     { 
      assert(mantissa > 0); 
      assert(mantissa < NumericLimits<short>::max); 
      assert(exponent < NumericLimits<short>::max); 
      assert(exponent > NumericLimits<short>::min); 
      assert(base < NumericLimits<short>::max); 
      assert(base > NumericLimits<short>::min); 
      return mantissa * ::pow(static_cast<long double>(base),exponent); 
     } 

と私のプログラムの他の場所で

と私は今、これらの資産を呼び出す場所にこのfncを呼び出すだけです。しかし、私が間違っているなら、私を修正:版のリリースでは削除されます主張するものの呼び出しは私が持っている場合:

void Assert (//neccesary args here) 
{ 
assert(mantissa > 0); 
       assert(mantissa < NumericLimits<short>::max); 
       assert(exponent < NumericLimits<short>::max); 
       assert(exponent > NumericLimits<short>::min); 
       assert(base < NumericLimits<short>::max); 
       assert(base > NumericLimits<short>::min); 
} 

もうたリリースから削除するか、しないかを、このFNCに呼び出すのでしょうか?そして別のQ私はここで主張するのではなく、最終版で削除されると主張する利点があるので、if(!condition)のチェ​​ックが必要だと思います。どう思いますか?

+0

NDEBUGが定義されているとアサーションが削除されます。アサーションステートメント内で副作用のあるステートメントを実行することは、決して良い考えではありません。 –

+2

これらのアサーションはかなり役に立たないことに注意してください。短いものはNumericLimits :: max'より大きい値を含むことができません。 –

+0

@Let_Me_Beあなたは絶対に正しいです。 @Let_Me_Be。 –

答えて

1

はい、assertはリリースビルドにはなりませんが、Assert関数の呼び出しはそのまま残ります。あなたのコンパイラは、空の関数を検出して呼び出しを抑制する可能性がありますが、私はそれを期待しません。 の場合、をリリースビルドから削除する場合は、一部を#ifdef/#endifで囲むことができます。

アサルトの利点については、それは明らかに「主観的かつ議論的」なので、私は合格します!

1

エラーチェックとアサートを常に組み合わせてください。さもなければ、すべての安定性コードがなくなるため、リリースモードでは何も得られません。だから私があなただったら、あなたの機能に悪いデータや無効なデータを守るためにif文を入れます。

「空の」関数がリリースビルドでコンパイラによって削除されるかどうかは、コンパイラに依存していると思います。しかし、私は、入力データが有効かどうかを判断する唯一のメカニズムとして、アサートを残すつもりはありません。私はそれを守るためにif文をつけます。したがって、それはある種の問題になります。

+0

アサートは「安定性コード」ではありません。アサートは、デバッガがこれらのコメントが実際に正しいかどうかをチェックする点を除き、コメントの一種です。それ以外にも、他のコメントのように、適切なプログラムの流れとは無関係です。 – MSalters

0

あなたのコンパイラが空の関数呼び出しを最適化するかどうかは、(それらのすべてが消えてしまうので)変わってくると思います。

関連する問題