0

使用(动态范围)

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;

问题是:对于调用序列,说明在最后一个过程 Main 调用 Suba 的执行过程中哪些变量是可见的;Suba调用Subb;Subb 调用 Subc

为什么是答案: Suba:A,X,W Subb:B,Z Subc:Y

我试过解决它,我只是不明白这是怎么回事,谁能提供解释

4

1 回答 1

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

于 2019-02-14T17:41:14.940 回答