Eri*_*nge 7 delphi assert runtime conditional-compilation
检查断言是否在Delphi中处于活动状态的条件是什么?
当代码中的断言不活动时,我希望能够做一些事情来抑制有关未使用变量的提示
procedure Whatever;
var
v : Integer;
begin
v := DoSomething;
Assert(v >= 0);
end;
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当断言未激活时,会有一个关于变量v被赋予从未使用的值的提示.
代码在一个将在各种环境中使用的库中,因此我能够专门测试断言,而不是像DEBUG那样的自定义条件.
Dav*_*nan 18
您可以使用该$IFOPT指令执行此操作:
{$IFOPT C+}
// this block conditionally compiled if and only if assertions are active
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)
所以你可以像这样重写你的代码:
procedure Whatever;
{$IFOPT C+}
var
v : Integer;
{$ENDIF}
begin
{$IFOPT C+}v := {$ENDIF}DoSomething;
{$IFOPT C+}Assert(v >= 0);{$ENDIF}
end;
Run Code Online (Sandbox Code Playgroud)
这将抑制编译器提示,但它也会使你的眼睛流血.
我可能会像这样压制它:
procedure SuppressH2077ValueAssignedToVariableNeverUsed(const X); inline;
begin
end;
procedure Whatever;
var
v : Integer;
begin
v := DoSomething;
Assert(v >= 0);
SuppressH2077ValueAssignedToVariableNeverUsed(v);
end;
Run Code Online (Sandbox Code Playgroud)
抑制函数接收的无类型参数足以抑制H2077.并且使用inline意味着编译器不发出代码,因为没有函数调用.
| 归档时间: |
|
| 查看次数: |
681 次 |
| 最近记录: |