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