【问题标题】:Is there any way to get the current unit's name from an include file?有没有办法从包含文件中获取当前单位的名称?
【发布时间】:2009-05-31 19:07:54
【问题描述】:

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

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

【问题讨论】:

    标签: delphi include compiler-warnings


    【解决方案1】:

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

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

    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 已声明但从未使用。

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

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

    【讨论】:

    • 我喜欢!这有点像 hack,但它设法找到了一种方法来完成我认为无法完成的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多