2

これは、stackoverflowで読んでいた別の質問で見た回答に関連する、ちょっとした後続の質問です。特定の関数のオーバーフローチェックを無効にしたい場合(この質問ごとに)、このコードにより、コンパイラオプションまたはコードで以前に有効にされていなくても、関数の実行後にオーバーフローチェックが突然有効になりますか?

{$OVERFLOWCHECKS OFF}
// function here
{$OVERFLOWCHECKS ON}

これをIFOPTブロック(おそらくこの例に似ていますか?)と組み合わせて、オーバーフローチェックを前の状態に戻す必要がありますか(デバッグ以外のビルドで誤ってオーバーフローチェックを有効にしないようにするため)?または、2つは異なり、これで十分ですか?ボーナス:IFOPTが必要な場合、オーバーフローチェックを条件付きで無効にするための特定の構文は何ですか?

4

1 に答える 1

14

はい、投稿したスニペットは、以前の内容に関係なく、オーバーフローチェックを自動的に有効にします。

これは機能するはずです。必要に応じて、とをそれぞれ{$Q+}とに置き換えることができます。{$Q-}{$OVERFLOWCHECKS ON}{$OVERFLOWCHECKS OFF}

{$IFOPT Q+}
  {$DEFINE OVERFLOW_ON}
  {$Q-}
{$ELSE}
  {$UNDEF OVERFLOW_ON}
{$ENDIF}
//
// Your code here
// 
{$IFDEF OVERFLOW_ON}
  {$Q+}
  {$UNDEF OVERFLOW_ON}
{$ENDIF}
于 2012-07-25T21:02:14.510 に答える