delphi - 有没有办法从包含文件中获取当前单位的名称?

标签 delphi include compiler-warnings

我正在将一些代码从一个框架库移植到另一个框架库,这需要我注释掉大部分代码以使其编译,然后小心地恢复它们。与此同时,由于所有注释掉的代码,我收到了大量警告。所以我决定编写一个快速包含文件来抑制它们:

{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code'}
{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}

我将其包含在所有给我大量警告的单元中,但现在当我编译时,编译器返回消息如下:

[DCC 警告] unfinished.inc(1): W1054 对带有注释代码的未移植单元抑制了警告

我希望它告诉我警告来自执行包含操作的单元,而不是包含文件本身。有什么方法可以做到这一点,或者将单元的名称添加到消息中,而无需实际将 $MESSAGE 指令从包含文件中移出并移入我执行此操作的每个单元中?

最佳答案

这里有一个技巧,它利用了这样一个事实:“未使用的私有(private)方法”的编译器提示包含声明该类的单元的名称,即使具有私有(private)方法的类是在包含文件中声明的。

这要求包含文件的包含指令出现在允许声明的单元的一部分中,因此要么在接口(interface)部分中的使用子句之后,要么在实现部分。

interface

uses Foo, Bar, Socks;

{$include Unfinished.inc}

您的包含文件应如下所示:

{$MESSAGE WARN 'Warnings suppressed for unported unit with commented-out code, Unit name see next line'}
type
  TUnit_With_Suppressed_Warnings = class
  private
    procedure UnitWithSuppressedWarnings; virtual; abstract;
  end;

{$WARN NO_RETVAL OFF}
{$WARN USE_BEFORE_DEF OFF}

现在,对于包含该包含文件的每个单元,您将收到以下两条消息:

[DCC Warning] unfinished.inc(1): W1054 Warnings suppressed for unported unit with commented-out code, Unit name see next line
[DCC Hint] actualunitname.pas(5): The private symbol UnitWithSuppressedWarnings was declared but never used.

请注意,实际单位的名称出现在第二行中。

备注:如果关闭编译器提示,您将看不到第二行。

关于delphi - 有没有办法从包含文件中获取当前单位的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/932638/

相关文章:

delphi - 如何使用delphi上传文件到gmail?

windows - 重新打开对话框时,访问键是否应保留下划线?

python - Django 模板 : Embed css from file

c - 使用属性 warn_unused_result 声明的警告 : ignoring return value of ‘realloc’ ,

c++ - 使用空标记结构,编译器声称我缺少初始化器,但我不是

delphi - InterLockedIncrement 不支持第二个参数?

delphi - 如何检查对过程的引用是否为零?

在 Jinja2 中导入/包含分配的变量

C++ 包含 header 约定

assembly - 编译时寄存器检查 Thumb-2 代码