我的目的是现代化源代码的某些方面,特别是在更多的平台独立性方面。例如,通过将WinAPI和特殊的Windows类(如TRegistry)标记为“已弃用”,它们可以被替换或至少移动并使其具有平台独立性。至于语言元素,我尤其想淘汰
with
、label
和goto
关键字。我已经尝试通过在单元文件底部插入
{$IF DECLARED(...)}{$MESSAGE WARN...}
来生成函数和类的警告,但这显然会失败与核心单元一起使用......有人知道一个能做到这点的工具吗?
with
、label
和goto
关键字。{$IF DECLARED(...)}{$MESSAGE WARN...}
来生成函数和类的警告,但这显然会失败与核心单元一起使用......你无法废弃像with
、goto
等关键字。如果想要现代化你的代码,只需查找这些单词并将其更改为整个单词。
对于Win.*核心单元中的标识符也是如此。你可以修改RTL并重新编译它,或者你可以从这里下载JEDI API头文件,并指定所有例程和类型为platform
,或仅限于单元。我建议不要重新编译RTL。你可以自行决定如何处理来自JEDI的单元。
除了Win.*单元之外,大多数RTL实际上都是平台无关的,即使在64位或Mac上,with
和goto
也能正常工作。
我的建议:寻找更好的方式来现代化你的代码,不要试图废弃RTL所提供的功能。
Windows
单元从未被标记为platform
,而它明显是特定于平台的,因为其中引入的所有符号都是如此。我知道旧的单元别名机制用于跨平台编译,但是,这种情况仍然不合适。/抱怨 - Premature Optimization首先,我不建议您按照您想要的方式进行操作,因为其他人已经提到了所有原因。但是,如果您觉得必须这样做,那么这里有一种方法可以实现您所要求的部分功能。
您可以在项目中为特定于平台的代码打开警告。至于其他您认为已被Delphi弃用但实际上并未被弃用的内容,我有一个需要一些工作的解决方案。
创建一个重新声明您想要弃用的类的单元,如下所示:
unit PleaseDeprecateThisStuff;
uses
Registry;
interface
type
TRegistry = class (Registry.TRegistry)
end deprecated;
implementation
end;
编辑2:我觉得我应该进一步解释一下源码。对于每个类,比如TRegistry
的例子,你需要在这个单元中包含一个同名版本,并使其与另一个单元中的版本完全相同。确保将该单元包含在此单元的使用子句中(duh),并在类型部分中添加类引用前缀,例如Registry.TRegistry
的示例。
包括您想要弃用的所有内容,然后在每个您想要“保护”的单元的接口uses
子句的末尾包含此单元。
编辑:这个技巧只能帮助处理类、变量和常量...不能处理保留字。
再次声明,这是一个可怕的想法。:p
无论你多么讨厌它们,也不能在核心语言特性(如with
、label
和goto
)上放置警告。
这些是保留字应该已经提示了你这一点。
这些特性不属于任何单元,它们是 Pascal 语言的一个特性(自其开始以来就一直存在),并深入编译器中。
你甚至不能重新定义它们,因为它们是保留字。
with
没有任何问题。符号可以发出警告,但保留字不行。 - Premature Optimization