20

我正坐在那里调试一些代码,我在 SysUtils.pas 中偶然发现了这一行:

procedure ConvertError(ResString: PResStringRec); local;

local 关键字究竟做了什么?似乎 ConvertError 函数未在文件的接口部分声明,这只是说明该函数确实是本地的,还是除此之外使用该指令还有实际好处?

4

1 回答 1

16

它可以追溯到 Linux 编译器 Kylix。这是我在 Delphi 6 语言指南第 9-4 页中看到的内容:

将例程标记为不可导出的指令local是特定于平台的,在 Windows 编程中无效。

在 Linux 上,local指令为编译到库中但不导出的例程提供了轻微的性能优化。该指令可以为独立的过程和函数指定,但不能为方法指定。用local声明的例程——例如。

function Contraband(I: Integer): Integer; local;

— 不刷新 EBX 寄存器,因此

  • 无法从库中导出。
  • 不能在单元的接口部分中声明。
  • 不能将其地址占用或分配给过程类型变量。
  • 如果它是纯汇编程序例程,则不能从另一个单元调用,除非调用者设置了 EBX。
于 2013-04-02T13:18:21.923 回答