📜  门| GATE-CS-2001 |第44章

📅  最后修改于: 2021-06-28 17:51:49             🧑  作者: Mango

考虑以下程序

Program P2 
    var n: int: 
     procedure W(var x: int) 
     begin 
         x=x+1; 
         print x;   
     end 
  
     procedure D 
     begin  
         var n: int; 
         n=3; 
         W(n);  
     end 
begin //beginP2 
  n=10; 
  D; 
end 

如果该语言具有动态作用域,并且参数是通过引用传递的,则程序将显示什么内容?
(A) 10
(B) 11
(C) 3
(D)以上都不是答案: (D)
解释:

在静态作用域或编译时作用域中,自由变量(函数中使用的变量既不是局部变量也不是该函数的参数)被称为全局变量,因为在编译时只有全局变量可用。
在动态作用域或运行时作用域中,自由变量被称为函数调用堆栈的最新帧中的变量。在过程W的函数调用中的给定代码中,将打印局部变量x,即4。在动态作用域中,如果过程W中不存在x,那么我们将在函数调用堆栈中引用该函数的x,即过程D和主要函数,但由于x是局部变量而不是自由变量,我们将其称为局部变量,因此将输出4。

请参阅https://www.geeksforgeeks.org/principle-of-programming-languages-set-1/的问题4

该解决方案由Parul Sharma提供。
这个问题的测验