当前位置:  开发笔记 > 运维 > 正文

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

如何解决《如何在运行时检测某些编译器选项(如断言)是否设置为ON?》经验,为你挑选了1个好方法。

检查断言是否在Delphi中处于活动状态的条件是什么?

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

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

在上面的代码中,当断言未激活时,会有一个关于变量v被赋予从未使用的值的提示.

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



1> David Heffer..:

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


+1和lol表示`suppress ...`方法的名称.压制这些提示的好方法.比为某些用于相同目的的任意语句添加注释要好得多.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有