Delphi 编译器如何在过程/函数中处理过程/函数

Delphi 编译器如何在过程/函数中处理过程/函数,delphi,Delphi,有些过程或函数写在另一个过程或函数中,如: function Foo: Integer; var A: String; procedure Bar; begin A := '2'; //code end; begin A:= '1'; Bar; Result := StrToInt(A); end; 在本例中,Foo函数中声明的所有变量都可以在Bar中访问。 如何共享上下文?调用范围将其帧指针作为隐藏参数传递给内部过程。然后,内部过

有些过程或函数写在另一个过程或函数中,如:

function Foo: Integer;
var A: String;
    procedure Bar;
    begin
      A := '2';
      //code
    end; 
begin
  A:= '1';
  Bar;
  Result := StrToInt(A);
end;
在本例中,Foo函数中声明的所有变量都可以在Bar中访问。
如何共享上下文?

调用范围将其帧指针作为隐藏参数传递给内部过程。然后,内部过程可以使用此隐藏指针访问外部作用域中的变量。

调用作用域将其帧指针作为隐藏参数传递给内部过程。然后,内部过程可以使用这个隐藏指针来访问外部作用域中的变量。

这是隐含的,也就是说,编译器知道。看看生成的代码,看看它是如何工作的。如果你想阅读这个理论,原始的PASCAL–用户手册和报告(N.Wirth/K.Jensen)有一个解释。您可以在上找到对它的引用。它是隐含的-也就是说,编译器知道。看看生成的代码,看看它是如何工作的。如果你想阅读这个理论,原始的PASCAL–用户手册和报告(N.Wirth/K.Jensen)有一个解释。您可以在上找到对它的引用。