【问题标题】:How to disable warnings from given unit without modifying that unit?如何在不修改该单位的情况下禁用给定单位的警告?
【发布时间】:2026-02-12 20:55:01
【问题描述】:

所以我在我的单元中包含了一些其他单元,并且在构建应用程序后,我收到了来自这些单元的大量警告。数量如此之大,以至于我无法在列表中找到自己的警告。 ;-)

是否有一些编译器指令可以让我关闭这些警告?但请注意,我不想以任何方式修改这些单位。我想实现这样的目标:

unit MyUnit;

interface

uses
  UnitA, {$WARN EMIT_WARNNIGS OFF} UnitB, {$WARN EMIT_WARNNIGS ON} UnitC, UnitD.

implementation

uses
  UnitE, {$WARN EMIT_WARNNIGS OFF} UnitF, UnitG, {$WARN EMIT_WARNNIGS ON} UnitH.

这是一个我想拥有的虚构编译器指令,或者它存在但我不知道?

感谢您的宝贵时间。

【问题讨论】:

  • 只是猜测,你试过uses ..., {$Warnings Off} UnitB {$Warnings On}, ...吗?
  • 反问:你为什么不想解决这些警告并...呃... khm...修复它们?
  • 修复它或 Boor 它!相信我,如果可以以任何方式避免的话,你不想使用警告臃肿的代码。您可以指望各种错误和访问违规以及浪费大量时间。
  • 只需将{$WARNINGS OFF} 添加到每个恶棍即可完成

标签: delphi delphi-2009 compiler-warnings


【解决方案1】:

有一个编译器指令可以关闭警告,但这只能在项目选项中设置,在这种情况下它适用于所有单元,或者在单元本身中设置,在这种情况下它仅适用于该单元。

所以,你有几个选择。

完全符合您要求的不切实际的选择:

因此,唯一的解决方案是禁用项目中的警告,然后使用该指令在您自己的所有单元中启用它们。

最简单、最现实的选择:

通过从库路径中删除源代码来编译单元并仅使用 DCU。如果您不想编辑它们,那是最简单的。

您仍然可以将它们添加到与库路径不同的浏览路径中。在这种情况下,使用了 DCU,但 Delphi 仍然可以找到源代码,因此您仍然可以在调试时导航它们。

小优点是构建项目也更快,因为这些单元不需要在每次构建时重新编译。

最佳选择:

完全停止使用这些单位。带有如此多警告的单元是劣质软件,可能会导致严重问题。

其他解决方案:

  • 抛开不修改单元的意愿,将编译器指令添加到这些单元中
  • 解决警告

【讨论】:

  • +1 表示“搁置你的愿望......”,因为这就是我在遇到这个问题时所做的。修改 3rd 方源时最重要的问题是您以后升级可能会遇到问题,但是单个{$WARNINGS OFF} 不会造成任何问题,因为它不会影响单元中的实际代码。
  • 感谢您的提示,我将此标记为答案,因为您给了我广泛的选择。
  • 澄清一下,当您说 source path 时,您的意思是 Browsing Path 吗? Delphi paths
  • @outlier 确实如此。我已经更新了答案。谢谢!
  • 很遗憾地说,使用VclStylesUtils(非常常见)会产生大量提示。理想的解决方案是修复它们,但是如果我更新该源,它将是未修复的:-/
【解决方案2】:

我使用 Delphi 7,我是这样做的...

不要将单元包含在项目 .dpr 中,否则这将不起作用,将单元的文件夹添加到项目选项的搜索路径中。

然后在您使用它的每个单元中,使用这些编译器指令:

  uses
    {$WARNINGS OFF}{$HINTS OFF}
    TheUnitHere;
    {$WARNINGS ON}{$HINTS ON}

【讨论】:

  • 还在用delphi 7吗?
  • 这是一个不错的提示,+1。
【解决方案3】:

不,我不相信有这样的指令。

我发现实现这一目标的唯一方法是

  • 编译一切
  • 将违规单元的 dcu 放在编译器可以找到的位置
  • 确保在该 dcu 的源代码之前找到该 dcu,或确保编译器无法找到源代码

这将确保不编译 pas,这样您就不会被来自违规单位的警告淹没。

当我不希望调试器进入库单元(我们总是从源代码编译)时,这是我经常采用的一种方法。我编译发布配置(debug = off),然后选择我不想进入的单元的 dcu,并确保编译器在相应的 pas 文件之前找到它们。

一个警告:确保当您(需要)在违规单元上工作时,将 dcu 移除,否则您将陷入混乱。 GExperts 的“清洁目录”可以帮助解决这个问题。

【讨论】:

    最近更新 更多