2013-04-02 11 views
20
의 "로컬"지시어

나는 SysUtils.pas에이 라인을 가로 질러 주위에 앉아 몇 가지 코드를 디버깅 나는 발견했다 :델파이

procedure ConvertError(ResString: PResStringRec); local; 

로컬 키워드가 정확히 무엇입니까? ConvertError 함수가 파일의 인터페이스 섹션에서 선언되지 않은 것처럼 보입니다.이 함수가 실제로 로컬인지 명확하게 설명되어 있습니까? 아니면이 지시문을 사용하면 실질적인 이점이 있습니까?

+3

지시문은 인터페이스에 선언이 없음을 보장합니다 (달리 컴파일 시간 오류가 발생 함). 흥미로운 ... –

+0

이 키워드에 대한 문서를 읽으려고 했습니까? – wRAR

+2

@wRAR f1을 눌렀지만 내장 문서에서 찾을 수 없습니다. 그런 다음 Google을 확인하고 아무 것도 생각 나지 않았지만 여기에 있습니다. – kling

답변

16

리눅스 컴파일러 인 Kylix와 거슬러 올라갑니다. 여기, 내 델파이 6 언어 설명서에서 9-4 참조 할 수있는 작업은 다음과 같습니다

이 지침 지역, export 할 수없는 루틴을 표시, 플랫폼 별 및 Windows 프로그램에 영향을주지 않습니다.

Linux의 경우 로컬 지시어는 라이브러리로 컴파일되지만 내보내지지 않은 루틴에 약간의 성능 최적화를 제공합니다. 지정 문은 독립형 프로 시저 및 함수에는 지정할 수 있지만 메소드에는 지정할 수 없습니다. 예를 들어 로컬로 선언 된 루틴.

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

-does는 EBX 레지스터를 새로 고칠 따라서

  • 는 라이브러리에서 내보낼 수 없습니다.
  • 인터페이스 섹션에서 선언 할 수 없습니다.
  • 의 주소는 프로 시저 유형 변수를 가져 오거나 프로 시저 유형 변수에 할당 할 수 없습니다.
  • 순수 어셈블러 루틴 인 경우 호출자이 EBX를 설정하지 않으면 다른 유닛에서 호출 할 수 없습니다.
+0

우수, 정확히 내가 찾고 있던 것이 었습니다! 감사! – kling

+2

로컬 지시어에 대한 엠바 카데로 문서의 [링크] (http://docs.embarcadero.com/products/rad_studio/radstudio2007/RS2007_helpupdates/HUpdate4/EN/html/devcommon/dynamicallyloadedlibs_xml.html)는 다음과 같습니다. – RRUZ

+0

@RRUZ 나는 또한 내 대답에 텍스트를 입력하여 발견! 델파이 2007 그래. 오래된 학교. –