Delphi 如何在不修改给定单元的情况下禁用该单元的警告?

Delphi 如何在不修改给定单元的情况下禁用该单元的警告?,delphi,delphi-2009,compiler-warnings,Delphi,Delphi 2009,Compiler Warnings,所以我在我的单元中加入了一些其他单元,在构建应用程序后,我收到了来自这些单元的大量警告。数量如此之大,以至于我很难在列表中找到自己的警告 是否有一些编译器指令允许我关闭这些警告?但请注意,我不想以任何方式修改这些单位。我想实现这样的目标: unit MyUnit; interface uses UnitA, {$WARN EMIT_WARNNIGS OFF} UnitB, {$WARN EMIT_WARNNIGS ON} UnitC, UnitD. implementation us

所以我在我的单元中加入了一些其他单元,在构建应用程序后,我收到了来自这些单元的大量警告。数量如此之大,以至于我很难在列表中找到自己的警告

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

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.
这是我想要的一个虚构的编译器指令,或者它存在,但我不知道


谢谢你的时间。

不,我不相信有这样的指示

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

  • 汇编一切
  • 将有问题的单元的dcu放在编译器可以找到它的地方
  • 确保dcu在该dcu的源代码之前找到,或者确保编译器无法找到该源代码
这将确保pas不会被编译,因此您不会被违规单位的警告淹没

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


一个警告:确保当你(需要)处理有问题的单元时,dcu被移除,否则你将陷入混乱。GExperts的“Clean directories”可以帮助实现这一点。

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

所以,你还有一些选择

不切实际的选项,完全按照您的要求执行:

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

最简单、最现实的选择:

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

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

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

最佳选择:

停止使用这些设备。有这么多警告的设备是劣质软件,可能会导致严重问题

其他解决方案:

  • 抛开您不修改这些单元的愿望,无论如何都要向这些单元添加编译器指令
  • 解决警告问题

我使用Delphi 7,下面是我如何使用它的

不要将该单元包含在项目中。dpr或这将不起作用,请在项目选项的搜索路径上添加该单元的文件夹

然后在使用它的每个单元中,使用以下编译器指令:

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

猜猜看,你有没有试过
使用…,{$Warnings Off}UnitB{$Warnings On},…
?反问题:为什么不解决这些警告并…呃…khm…修复它们?要么修复,要么停止!相信我,如果可以以任何方式避免的话,你不想使用过于臃肿的警告代码。你可以依靠各种错误和访问违规,浪费大量时间。只需添加
{$warnings OFF}
发送给每一个恶棍,并对其执行+1的“搁置您的愿望…”,因为这就是我在面对此问题时所做的。修改第三方源代码时最重要的问题是,您可能在以后升级时遇到问题,但只有一个
{$WARNINGS OFF}
不会产生任何问题,因为它不会影响单元中的实际代码。感谢您的提示,我将此标记为一个答案,因为您给了我广泛的选择。只是澄清一下,当您说源路径时,您是指浏览路径吗?@outlier确实是。我已经更新了答案。谢谢!使用
VclSty很遗憾lesUtils(非常常见)正在生成大量提示。理想的解决方案是修复它们,但如果我更新该源代码,它将是不修复的:-/仍然使用delphi 7?这是一个很好的提示,+1。