可以禁用特定的Delphi提示吗?

18
在Delphi中,您可以使用编译器指令来禁用特定警告,例如
{$WARN USE_BEFORE_DEF OFF}

但是当我尝试针对一个具体的提示使用这种方式,即使用我在帮助文件中找到的下划线风格名称进行设置时,编译器会报错说不知道 {$HINT} 是什么。那么有没有其他方法可以实现这个目的呢?


3
因为我不喜欢生成提示和警告,通过阅读代码,我可以看到这个提示所警示的可能情况在这种情况下并不适用。 - Mason Wheeler
5
是的。大多数情况下它们都是这样的。但是在这种情况下,编译器没有理解“raise”退出过程。 - Mason Wheeler
是的,提示是你的朋友。不要对提示抱有敌意。 - Jim McKeeth
同意:在代码中应该修复提示和警告,而不是忽略它们。 - Nick Hodges
7
@everybody_saying_not_to_turn_off_hints: 当然有一些编译器警告和提示是错误的。通常这发生在复杂代码中,例如:如果我初始化一个变量,它会告诉我赋给它的值将不会被使用;如果我不初始化它,它又告诉我可能未被初始化。还有其他奇怪的问题,但这个是我遇到最多的。(这是Delphi 2007,后续版本可能已经修复了这个问题) - dummzeuch
显示剩余4条评论
4个回答

31

没有具体的提示,但是你可以禁用它们全部。

{$HINTS OFF}
procedure MyProc;
var
  i : integer;
begin
  DoSomething;
end;
{$HINTS ON}

1
是的,这正是我担心的。 - Mason Wheeler

7

有点离题:你应该关注编译器的提示和警告。它们不是为了好玩而存在的。编译器只是在说“你的源代码不准确,程序可能会产生你意想不到的结果”。


1
是的,提示是你的朋友。不要讨厌提示。 - Jim McKeeth
1
我看了一下Mason的代码,并向他展示了如何修复提示。这是一个未定义的else条件。我从来没有遇到过无法修复的提示或警告。编译器是我的朋友。 - Jim McKeeth
2
但是...有些情况下这绝对是有意义的。只举一个例子:关于H2457,除了重构大量代码以使编译器停止抱怨之外,你几乎无能为力。这将是仅禁用该特定问题的典型示例。不内联该特定调用并非世界末日,所以闭嘴吧,编译器! - JensG

6
要确保安全,我们可以这样做:
function TopazGetText(const _s: string): string;
begin
{$IFOPT <something>+}
{$DEFINE HINTS_WERE_ON}
{$HINTS OFF}
{$ELSE}
{$UNDEF HINTS_WERE_ON}
{$ENDIF}
  Result := dzDGetText(_s, TOPAZ_TRANSLATION_DOMAIN);
{$IFDEF HINTS_WERE_ON}
{$HINTS ON}
{$ENDIF}
end;

很遗憾,似乎没有编译指令来检查提示是否关闭,因此您无法执行此操作。(H+不是用于提示而是用于长字符串)。 此外,在函数/过程中,HINTS OFF / ON不起作用。 因此,您最终会无条件地为整个函数关闭和打开提示。
{$HINTS OFF}
function TopazGetText(const _s: string): string;
begin
  Result := dzDGetText(_s, TOPAZ_TRANSLATION_DOMAIN);
end;
{$HINTS ON}

编译器曾告诉我它无法内联dzDGetText,但在这种情况下我并不关心这个问题,也不想看到提示信息,因为这会阻止我(以及我的同事)关注重要的提示。


4

我能想到的最好的方法是用条件定义来包围提示的主题,并在可能或不可能需要的代码周围使用相同的条件定义,如下所示:

如果你有这个:

procedure MyProc;
var
  i : integer;
begin
  DoSomething;
  //SomethingWith_i_IsCommentedOut;
end;

你会得到以下提示信息:提示:变量“i”已声明但从未使用过 因此,请尝试使用以下代码替代:
procedure MyProc;
  {$IFDEF USE_THE_I_PROCEDURE}
var
  i : integer;
  {$ENDIF}
begin
  DoSomething;
  {$IFDEF USE_THE_I_PROCEDURE}
  SomethingWith_i_IsCommentedOut;
  {$ENDIF}
end;

现在你可以打开或关闭定义,并且你永远不会收到提示。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接