【发布时间】:2013-11-20 18:28:04
【问题描述】:
如果 pascal 使用动态范围,这段代码的结果是什么?? 通过使用静态范围,我得到了这些结果! x=32 , y=39 和 z=105
program what(output);
var
y, z: integer;
procedure p(x, z: integer);
procedure a(y: integer);
begin (* of procedure a *)
writeln(x, y, z);
x := x + 5;
end;
procedure b(x:integer);
begin (* of procedure b *)
writeln(x, y, z);
y := y + 2;
a(x + 7);
end;
begin (* of procedure p *)
b(32);
writeln(x, y, z);
a(47);
writeln(x, y, z);
end;
procedure q(x,y:integer);
begin (* of procedure q *)
p(x + 4, x + y);
writeln(x, y, z);
end;
begin (* of program what *)
y := 21;
z := 105;
q(y + 1, y + z);
writeln(y, z);
end.
【问题讨论】:
-
这是哪种帕斯卡?到目前为止,它无法编译到我所知道的任何内容中。
-
@TLama:令人惊讶的是,它实际上可以编译。它会生成一个
[dcc32 Warning] Project1.dpr(30): W1011 Text after final 'END.' - ignored by compiler,但 XE5 会编译它。 ??? -
我没有得到相同的结果:我得到的最终输出是 Y = 23, Z = 105。
-
@TLama:查看帮助文件。在 XE5 的 docwiki 中,它是 here,在
The Program Heading下:在标准 Pascal 中,程序标题可以在程序名称后包含参数:program Calc(input, output);Embarcadero 的 Delphi 忽略这些参数。 (强调我的。) -
它们是文件句柄 iirc。前两个是标准输入和输出,其余的是额外文件。 IIRC 一些旧操作系统(VMS?)需要在命令行上声明所有要访问的文件。如此声明但未分配的文件是临时文件。 (GNU Pascal 站点和 Scott Moore 的常见问题解答对此有一些信息。(ISO Pascal)。TP 已经跳过了这个,FPC 也这样做了,但是对于 ISO 模式,这实际上是一个错误 :-)
标签: dynamic static scope pascal