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

时间:2016-12-20 18:21:48

标签: delphi delphi-7

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

// 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进行此操作感兴趣。

3 个答案:

答案 0 :(得分:4)

您可以这样标记方法:

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

这将删除此过程的提示。

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

答案 1 :(得分:2)

您无需禁用提示。您可以使用{$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;

禁用提示的问题在于,其他代码可能会在禁用它们之前以及重新启用之前潜入其中。我不喜欢把它们关掉,因为它们会导致错过我不想发生的事情。

答案 2 :(得分:0)

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

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