gpt4 book ai didi

delphi - 如何在运行时检测某些编译器选项(如断言)是否设置为 ON?

转载 作者:行者123 更新时间:2023-12-03 14:50:06 26 4
gpt4 key购买 nike

检查断言在 Delphi 中是否有效的条件是什么?

当断言在代码中未激活时,我希望能够做一些事情来抑制有关未使用变量的提示

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

在上面的代码中,当断言未激活时,会提示变量 v 被分配了一个从未使用过的值。

代码位于将在各种环境中使用的库中,因此我能够专门测试断言,而不是像 DEBUG 这样的自定义条件。

最佳答案

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

关于delphi - 如何在运行时检测某些编译器选项(如断言)是否设置为 ON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16730471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com