关于静态和动态范围问题的问题

时间:2011-04-02 08:53:32

标签: pascal scoping

您能否确认我对以下代码的回答:

procedure main
var x,y,z;

    procedure sub1
       begin
        var x,z 
        x := 6;
        z := 7;
        sub2();
        x := y*z + x;
        print(x);       
      end
    procedure sub2
      begin
        var x,y
        x := 1;
        y := x+z+2;
        print(y);       
      end
begin
    x := 1; y:=3; z:=5;
    sub1();
    sub2();
end 

我得到了:

  • 静态:

    8
    27
    
  • 动态:

    10
    27
    

这是对的吗?

2 个答案:

答案 0 :(得分:0)

如果 Pascal支持动态作用域,那么就你的分析而言,你的分析是正确的。在z中声明的sub1变量 shadow main中声明的变量,即使在sub2内也是如此。但x中声明的sub2不会影响x中声明的sub1的值,因此sub1在读取x时仍会使用原始值6调用sub2之后{1}}。

但您的分析不完整。每次应该打印三个值,而不仅仅是两个。在这两种情况下,打印的第三个值应为8。

答案 1 :(得分:-1)

我不知道静态与动态意味着什么。 Pascal总是在最里面的范围内使用变量。如果你使用它,那么结果是8,27。我不知道你是怎么得到其他结果的(一切都是全球性的?)