考虑以下程序
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提供。
这个问题的测验