使用(动态范围界定)
procedure Main is
X, Y, Z : Integer;
procedure Suba is
A, Y, X : Integer;
begin
-- Suba body
end;
procedure Subb is
A, B, Z : Integer;
begin
-- Subb body
end;
procedure Subc
A, X, W : Integer;
begin
--- Subc body
end;
begin
--- Main body
end;
问题是: 对于调用顺序,请说明哪些变量可见 在执行最后一个过程期间 主要电话Suba; Suba称为Subb; Subb呼叫Subc
为什么是答案: Suba:A,X,W SUBB:B,Z SUBC:Y
我尝试通过它完成工作,但我不知道答案如何 谁能提供一个解释
答案 0 :(得分:0)
每个调用都“继承”其调用者可见的变量,并引入其自己的变量。如果调用中引入的变量与调用方中的变量具有相同的名称,则调用方的变量将被隐藏。从Subc
内部可见这样的图层:
Main X Y Z
Suba A Y Z
Subb A B Z
Subc A W X
您可以看到的变量是每列中从底部开始查找的第一个变量。这表明从调用Subc
内部,您可以看到以下内容:
* `A`, `W`, and `X` as defined by `Subc`.
* `B` and `Z` as defined by `Subb`.
* `Y` as defined by `Suba`.
这会颠倒您在问题中提到的Suba
和Subc
的数量。这个答案实际上没有任何意义,因为Suba
根本没有定义W
。