是否可以禁用特定的Delphi提示?

Mas*_*ler 15 delphi compiler-construction directive hints

在Delphi中,您可以使用编译器指令禁用特定警告,例如

{$WARN USE_BEFORE_DEF OFF}
Run Code Online (Sandbox Code Playgroud)

但是当我尝试用特定的提示做到这一点时,编译器表示它不知道{$ HINT}是什么,而我的undercore_style_name是从帮助文件中获取的.有没有办法做到这一点?

Lar*_*ens 31

没有具体提示,但您可以全部禁用它们.

{$HINTS OFF}
procedure MyProc;
var
  i : integer;
begin
  DoSomething;
end;
{$HINTS ON}
Run Code Online (Sandbox Code Playgroud)


DiG*_*iGi 8

一点偏离主题:您应该注意编译器的提示和警告.它们不仅仅是为了好玩.编译器只是说"程序可能会以不同的方式工作,因为您的源代码不准确".

  • 但是……在某些情况下它绝对是有道理的。仅举一个例子:关于 [H2457](http://docwiki.embarcadero.com/RADStudio/Berlin/en/H2457_Inline_function_%27%25s%27_has_not_been_expanded_because_contained_unit_%27%25s%27_uses_compiling_unit_%27%25s%27_indirectly_( Delphi))具体来说,除了重构大量代码只是为了让编译器停止抱怨。这将是仅禁用该特定项的典型示例。没有内联特定的调用并不是世界末日,所以闭嘴,编译器! (2认同)

dum*_*uch 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;
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎没有用于检查提示是否关闭的编译器指令,因此您无法执行此操作.(H +不是用于提示,而是用于长串).此外,HINTS OFF/ON在功能/程序中不起作用.

因此,您最终无条件地为整个功能打开和关闭提示:

{$HINTS OFF}
function TopazGetText(const _s: string): string;
begin
  Result := dzDGetText(_s, TOPAZ_TRANSLATION_DOMAIN);
end;
{$HINTS ON}
Run Code Online (Sandbox Code Playgroud)

(编译器曾经告诉我,它无法内联dzDGetText,这是我在这种情况下并不关心的事情,我不想看到提示,因为这会阻止我(和我的同事)关心重要的提示.)