5

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

{$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 指令从包含文件中移出并移到我执行此操作的每个单元中?

4

1 回答 1

14

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

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

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 警告] unfinished.inc(1):未移植单元的 W1054 警告被取消,代码被注释掉,单元名称见下一行
[DCC 提示]actualunitname.pas(5):私有符号 UnitWithSuppressedWarnings 已声明但从未使用。

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

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

于 2009-05-31T23:47:06.573 回答