【发布时间】:2013-11-03 16:08:13
【问题描述】:
所以我遇到了这个问题,我必须使用两个不同的范围规则来计算输出。我知道使用词法作用域的输出是 a=3 和 b=1,但我很难使用动态作用域来计算输出。
注意:下面的代码示例使用 C 语法,但我们只是将其视为伪代码。
int a,b;
int p() {
int a, p;
a = 0; b = 1; p = 2;
return p;
}
void print() {
printf("%d\n%d\n",a,b);
}
void q () {
int b;
a = 3; b = 4;
print();
}
main() {
a = p();
q();
}
这是我想出的。
使用动态范围,对a 和b 的非本地引用可以更改。所以我有a=2(从 p() 返回),然后是b=4(在 q() 内)。
所以输出是2 4?
【问题讨论】:
-
我认为您应该避免使用与函数同名的变量 (
p)。 -
您如何想象 C 代码的动态作用域?
标签: scope lexical-scope dynamic-scope