7

Delphiでアサーションがアクティブかどうかを確認する条件は何ですか?

次のようなコードでアサーションがアクティブでないときに、未使用の変数に関するヒントを抑制するために何かできるようにしたいと思います

procedure Whatever;
var
   v : Integer;
begin
   v := DoSomething;
   Assert(v >= 0);
end;

上記のコードでは、アサーションがアクティブでない場合、変数 v に使用されない値が割り当てられているというヒントがあります。

コードはさまざまな環境で使用されるライブラリにあるため、DEBUG のようなカスタム条件ではなく、アサーションを具体的にテストできます。

4

1 に答える 1

18

$IFOPTこれは、次のディレクティブを使用して実行できます。

{$IFOPT C+}
  // this block conditionally compiled if and only if assertions are active
{$ENDIF}

したがって、次のようにコードを書き直すことができます。

procedure Whatever;
{$IFOPT C+}
var
   v : Integer;
{$ENDIF}
begin
   {$IFOPT C+}v := {$ENDIF}DoSomething;
   {$IFOPT C+}Assert(v >= 0);{$ENDIF}
end;

これにより、コンパイラのヒントが抑制されますが、目が出血します。

私はおそらく次のようにそれを抑制します:

procedure SuppressH2077ValueAssignedToVariableNeverUsed(const X); inline;
begin
end;

procedure Whatever;
var
   v : Integer;
begin
   v := DoSomething;
   Assert(v >= 0);
   SuppressH2077ValueAssignedToVariableNeverUsed(v);
end;

H2077 を抑制するには、suppress 関数が受け取る型指定されていないパラメーターで十分です。また、を使用inlineすると、関数呼び出しがないため、コンパイラはコードを発行しません。

于 2013-05-24T08:18:10.413 に答える