int a=27;
f()
{
int a=32;
g();
}
g()
{
print a;
{
int a=99;
h();
}
}
h()
{
print a;
}
void main()
{
print a;
f();
g();
h();
}
我得到的静态范围答案为 27, 27, 27, 27, 27, 27,动态范围答案为 27, 32, 99, 27, 99, 27。我说得对吗?
最佳答案
C/C++ 不使用动态作用域,因此您总是会得到相同的答案:27, 27, 27, 27, 27, 27。
关于范围界定的更多信息:
静态范围:
const int b = 5;
int foo()
{
int a = b + 5;
return a;
}
int bar()
{
int b = 2;
return foo();
}
int main()
{
foo(); // returns 10
bar(); // returns 10
return 0;
}
动态作用域(未在 C/C++ 中使用......为了示例)
const int b = 5;
int foo()
{
int a = b + 5;
return a;
}
int bar()
{
int b = 2;
return foo();
}
int main()
{
foo(); // returns 10
bar(); // returns 7
return 0;
}
动态作用域意味着当引用符号时,编译器/解释器将遍历符号表堆栈以找到要使用的变量的正确实例。
关于c - C 中嵌套函数的作用域如何受到影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32801433/