删除有关已声明但未使用的符号的编译器警告

Remove compiler warning about symbol declared but not used

我已经声明了一些偶尔仅用于调试的方法。例如:

// For debugging purposes only
{$IFDEF DBG}
procedure SaveLUTs();
{$ENDIF}

这些方法很少使用,只有在定义了 DBG 时才会使用。如果不使用该方法,则会生成以下编译器警告:

[Hint] Hardware.pas(184): Private symbol 'SaveLUTs' declared but never used

除了注释掉方法声明和方法体之外,有没有办法标记SaveLUTs,这样编译器就不会产生警告了?我仍然需要生成通常的警告,包括有关未使用的其他已声明方法或变量的警告。

使用 Delphi 7 并且对如何对 Delphi 的较新版本也能做到这一点感兴趣。

您可以像这样标记该方法:

{$Hints Off}
procedure SaveLUTs();
{$Hints On}

这将删除此过程的提示。

请注意,{$Hints ON} 将为单元的其余部分启用提示,而不管之前的 $Hints 状态如何。由于 {$IFOPT} 不适用于长名称指令(至少,直到 Delphi 10 Seattle...),我不知道有什么方法可以恢复以前的状态。

您不需要禁用提示。你可以用你的 {$IFDEF DBG} 完成这一切,并且只有在定义存在时才编译和使用符号。我经常将此与加密文件的代码一起使用,并在测试时通过电子邮件发送它,因为我不希望加密发生或电子邮件与附件一起发送。

unit Hardware;

interface

{.$DEFINE DBG}    // Remove . to include debugging code

uses
  SysUtils;

// Other procedure defs
procedure DoSomething;
procedure DoAnotherThing;
{$IFDEF DBG}
procedure SaveLuts;
{$ENDIF}

implementation

{$IFDEF DBG}
procedure SaveLuts;
begin
  // Code here
end;
{$ENDIF}

procedure DoSomething;
begin
  // Code here
end;

procedure DoAnotherThing;
begin
  // Code here
end;
end.

在您希望使用调试代码的单元中:

procedure Main;
begin
  DoSomething;
  {$IFDEF DBG}
  SaveLuts;
  {$ENDIF}
  DoAnotherThing;
end;

禁用提示的问题是其他代码可能会在它们被禁用的地方和重新启用之前潜入。我不喜欢关闭它们,因为它们会导致我不想发生的事情被错过。

另一种选择是将这些方法的可见性从私有更改为受保护。如果它们不是私有的,编译器将不再报错。

这当然有方法不再是私有的缺点。