2013-04-02 55 views
20

我坐在調試一些代碼,我偶然發現這一行SysUtils.pas:的「本地」指令德爾福

procedure ConvertError(ResString: PResStringRec); local; 

是什麼地方的關鍵字做什麼呢?看起來ConvertError函數沒有在文件的接口部分聲明,這只是一個澄清,該函數確實是本地的,或者除了那個使用這個指令是否有實際好處?

+3

看來,該指令確保接口中沒有聲明(否則會導致編譯時錯誤)。有趣... –

+0

您是否嘗試閱讀關鍵字的文檔? – wRAR

+2

@wRAR我碰到了f1,但內置的文檔找不到它。然後我檢查了谷歌,並沒有提出什麼,在這裏我們;) – kling

回答

16

它可以追溯到Linux編譯器Kylix。這是我可以在我的Delphi 6語言指南看到,第9-4頁:

該指令當地,這標誌着程序不可用用於出口,是特定於平臺的,並在Windows編程中沒有任何影響。

在Linux上,本地指令爲編譯到庫中但未導出的例程提供輕微的性能優化。該指令可以指定爲獨立的程序和函數,但不適用於方法。例如,用本地聲明的例程。

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

- 不刷新EBX寄存器,因此

  • 不能從庫中導出的。
  • 不能在接口部分聲明單位。
  • 不能將其地址作爲或分配給程序型變量。
  • 如果它是純粹的彙編程序,則不能從另一個單元調用,除非調用者設置了EBX。
+0

非常好,正是我在找的!謝謝! – kling

+2

這裏是關於本地指令的embarcadero文檔[鏈接](http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/dynamicallyloadedlibs_xml.html)。 – RRUZ

+0

@RRUZ我還發現,通過在我的答案中輸入文字!德爾福2007年。老套。 –