提问人:Ching Chong 提问时间:9/21/2014 最后编辑:mafuChing Chong 更新时间:9/25/2014 访问量:54
如果我在定义变量之前赋值,会发生什么情况?(ALGOL 范围规则集)
What happens if I assign a value before defining its variable? (ALGOL scope ruleset)
问:
在具有作用域规则的语言中,如在 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,这个问题不会出现,因为声明总是在语句之前(并且没有初始化的语法)
上一个:证明类型声明语法的语法歧义
下一个:将小数组排序为大型排序数组
评论