我正坐在那里调试一些代码,我在 SysUtils.pas 中偶然发现了这一行:
procedure ConvertError(ResString: PResStringRec); local;
local 关键字究竟做了什么?似乎 ConvertError 函数未在文件的接口部分声明,这只是说明该函数确实是本地的,还是除此之外使用该指令还有实际好处?
我正坐在那里调试一些代码,我在 SysUtils.pas 中偶然发现了这一行:
procedure ConvertError(ResString: PResStringRec); local;
local 关键字究竟做了什么?似乎 ConvertError 函数未在文件的接口部分声明,这只是说明该函数确实是本地的,还是除此之外使用该指令还有实际好处?
它可以追溯到 Linux 编译器 Kylix。这是我在 Delphi 6 语言指南第 9-4 页中看到的内容:
将例程标记为不可导出的指令local是特定于平台的,在 Windows 编程中无效。
在 Linux 上,local指令为编译到库中但不导出的例程提供了轻微的性能优化。该指令可以为独立的过程和函数指定,但不能为方法指定。用local声明的例程——例如。
function Contraband(I: Integer): Integer; local;
— 不刷新 EBX 寄存器,因此
- 无法从库中导出。
- 不能在单元的接口部分中声明。
- 不能将其地址占用或分配给过程类型变量。
- 如果它是纯汇编程序例程,则不能从另一个单元调用,除非调用者设置了 EBX。