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。并且使用inline意味着编译器不会发出任何代码,因为没有函数调用。

于 2013-05-24T08:18:10.413 回答