如果我在定义变量之前赋值,会发生什么情况?(ALGOL 范围规则集)

What happens if I assign a value before defining its variable? (ALGOL scope ruleset)

提问人:Ching Chong 提问时间:9/21/2014 最后编辑:mafuChing Chong 更新时间:9/25/2014 访问量:54

问:

在具有作用域规则的语言中,如在 ALGOL 中,允许在定义变量之前为变量赋值,即声明在其整个 {block} 中有效。例如,在 Pascal 和 Java 中使用 ALGOL 范围规则集(命名空间和方法可见性)。

以下示例将打印 .42

print i;
int i = 42;

但是,以下代码片段中会发生什么?

i = 21;
print i;
int i = 42;
与语言无关 的作用域 编程语言

评论


答:

1赞 Tony Chiboucas 9/25/2014 #1

这个问题无法从与语言无关的角度来回答。这很有可能甚至无法从特定于语言的、与编译器无关的角度来回答。行为将由编译器本身决定。

一个示例 Algol-68 编译器将为 i 创建符号,然后逐行迭代特定块,因此将打印 21。

其他编译器可能会以不同的方式处理此问题,从而导致错误或 42,但其行为很可能与上面的示例类似。

评论

1赞 user13784117 7/13/2020
对于 Algol 68,结果必须是打印 21;标识符“I”的解析并不明确。对于 Algol 60,这个问题不会出现,因为声明总是在语句之前(并且没有初始化的语法)