我正在将一些代码从一个框架库移植到另一个框架库,这需要我注释掉大部分代码才能使其编译,然后仔细恢复它们。与此同时,由于所有已注释掉的代码,我收到了大量警告。所以我决定写一个快速包含文件来压制它们:
{$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指令移出include文件并进入我执行此操作的每个单元?
答案 0 :(得分:14)
这是一个技巧,它使用了“未使用的私有方法”的编译器提示包含单元名称的事实,即使在包含文件中声明具有私有方法的类,也会声明该类。
这要求包含文件的include-directive出现在单元的一部分中,允许声明,因此要么在接口部分的uses子句之后,要么在uses子句之后实施部分。
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但从未使用过。
请注意,实际单位的名称显示在第二行。
备注:如果编译器提示已关闭,您将看不到第二行。