Delphi 中检查断言是否有效的条件是什么?
当断言在代码中不活动时,我希望能够做一些事情来抑制有关未使用变量的提示,例如
procedure Whatever;
var
v : Integer;
begin
v := DoSomething;
Assert(v >= 0);
end;
在上面的代码中,当断言未激活时,会提示变量 v 被分配了一个从未使用过的值。
该代码位于将在各种环境中使用的库中,因此我能够专门测试断言,而不是像 DEBUG 这样的自定义条件。
您可以使用$IFOPT http://docwiki.embarcadero.com/RADStudio/en/IFOPT_directive_%28Delphi%29指示:
{$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
意味着编译器不会发出任何代码,因为没有函数调用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)