【问题标题】:How can I use Macros in Delphi?如何在 Delphi 中使用宏?
【发布时间】:2014-08-24 06:16:12
【问题描述】:

如何在 Delphi 中使用宏?这个功能在FPC 中已经有很长一段时间了。可以通过构建前或构建后事件来完成吗?

例子:

{$define sum:=a:=a+b;}  

【问题讨论】:

  • FPC 中的宏用于一些简单的情况(例如简单的 {$ifdef mswindows} stdcall{$else}cdecl{$endif} 宏。它们不适用于一般编程,这就是它们的原因不可参数化。对于普通 C 使用宏的情况,泛型和内联确实是合适的解决方案。
  • 您正在考虑条件符号。 {$DEFINE} 在 FreePascal 中比在 Delphi 中更灵活。 FreePascal 支持定义可以在编译时替换为代码的整个表达式,类似于 C 预处理器宏。阅读 FreePascal 文档的Section 2.2
  • @RemyLebeau 我在想{$Macro ON} in FPC
  • 当使用{$MACRO ON} 时,{$DEFINE} 可以定义表达式,而不仅仅是符号名称。这样的扩展宏不是“用于简单情况”,而是“用于一般编程”。这就是我不同意您之前的评论的原因。
  • @RemyLebeau 是的,我希望这是在 Delphi 中。很有用。

标签: delphi delphi-xe6


【解决方案1】:

您不能在 Delphi 中使用宏。不存在这样的功能。最接近的内置功能是 inline 函数。


您当然可以编写自己的扩展宏的预处理器。但是,您将无法使其与 IDE 很好地集成。至少,不是以我认为可以接受的方式。

问题在于将宏扩展至何处。您几乎无法将其扩展为原始文件,因为您无法实际修改它。因此,您需要扩展为一个临时文件。并且编译器没有任何机制可以从临时文件构建。我想您可能会扩展为包含文件。这可能是最好的选择,但使用起来会很糟糕。例如,考虑调试时的乐趣。

【讨论】:

  • 您可以使用外部预处理器。你似乎错过了那个。
  • 显然,您可以编写任何您喜欢的外部工具来生成代码,但根据问题,这并不是真正的“在 Delphi 中使用宏”。
  • 我同意 inline 在 cpp 世界中看起来很像宏
  • @stanleyxu2005 你不能总是内联。文档中有相当多的列表。
  • @user3764855 由于 Delphi 没有宏,而且编写自己的预处理器可能不方便,也许您可​​以告诉我们是什么激发了这个问题,我们可以看看我们是否可以给出最好的建议德尔福解决方案。
【解决方案2】:

Delphi 不提供宏的内置功能。也许DWScript 就是你要找的。​​p>

【讨论】:

  • 好吧,如果我们准备使用其他工具,那么问题中提到的 FPC 听起来像是一个候选......
猜你喜欢
  • 1970-01-01
  • 2021-10-25
  • 2011-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多