如何在使用某些RTL / VCL或Delphi语言元素时生成警告

时间:2011-10-04 12:38:56

标签: delphi delphi-2010

我想将某些元素,函数和类标记为已弃用,以便编译器生成警告。

我的目的是使源的某些方面现代化。特别是在关注更多平台独立性时。

E.g。通过将WinAPI和特殊Windows类(例如TRegistry)标记为“已弃用”,可以替换它们或至少移动它们并使其与平台无关。 至于语言元素,我特别想弃用withlabelgoto关键字。

我已经尝试通过在单元文件的底部插入{$IF DECLARED(...)}{$MESSAGE WARN...}来为函数和类生成警告,但这显然会因核心单元而失败...

有人知道这样做的工具吗?

4 个答案:

答案 0 :(得分:2)

您无法弃用withgoto等关键字。如果您希望对代码进行现代化改造,只需将这些字词作为整个单词查找,如果找到它们,请更改您的代码。

Win。*核心单元中的标识符也是如此。您可以修改RTL并重新编译它,或者您可以从here下载JEDI API标头并指定所有例程和类型platform,或仅指定单元。我建议不要重新编译RTL。你用JEDI的单位做什么取决于你。

除Win。*单元外,大多数RTL实际上与平台无关,即使withgoto也可以在64位或Mac上运行。

我的建议:找到一种更好的代码现代化方法。不要试图弃用RTL提供的内容。

答案 1 :(得分:1)

无论您多么讨厌它们,都无法对withlabelgoto等核心语言功能发出警告。
这些都是保留字的事实本应该让你知道这一点。

这些功能不在任何单元中,它们是Pascal语言的一个特性(并且从一开始就已经存在)并深入编译器。

你甚至无法重新定义它们,因为它们是保留字。

答案 2 :(得分:1)

作为警告的替代方案,您可以使用一个简单的应用程序来解析所有源代码并报告这些构造的使用。

通过一些调查,我相信你可以找到一些静态代码分析工具,它们甚至会更进一步,并提醒你某些代码气味。 (例如,不正确地使用try..finally,吞下例外)。

将应用程序或静态代码分析器作为构建过程中的一个步骤插入,并且您具有相当于编译时警告的功能。

答案 3 :(得分:1)

首先,由于其他人所说的所有原因,我建议你不要去你想去的路线。但是,如果您觉得必须,那么这里有一种方法可以满足您的要求。

您可以为项目中的platform特定代码启用警告。至于你认为已经弃用但Delphi实际上不推荐使用的其他东西,我有一个解决方案需要一些工作。

创建一个重新声明要弃用的类的单元,如下所示:

unit PleaseDeprecateThisStuff;

uses
  Registry;

interface

type
  TRegistry = class (Registry.TRegistry)
  end deprecated;

implementation

end;

EDIT2:我觉得我应该进一步解释这个来源。对于每个类,例如TRegistry示例,您需要在此单元中包含相同名称的版本,并使其与另一个单元中的版本相同。确保将该单元包含在本单元的uses子句中(duh)并在类型部分中为类引用添加前缀,例如Registry.TRegistry的示例。

包括您要弃用的所有内容,然后将此单元包含在您要“保护”的每个单元的接口 uses子句的结束处。< / p>

编辑:这个技巧只对类,变量和常量有帮助......不是保留字。

再次,让我说这是一个可怕的想法。 :P