C / C ++中的静态作用域
在下面的代码中,打印2
。
int x = 1;
int f(int y)
{
return x;
}
int main() {
x = 2;
printf("%d", f(0));
}
如果我们在C中进行静态范围设定,情况如何? 为什么不是1
打印?
在这种情况下打印2
不是动态范围,是吗?
我认为,在静态范围内,它应该采用与函数定义最接近的x。
它确实需要最近的x
,但由于你只有一个x
所以它并不重要。
如果您将代码更改为
int x = 1;
int f(int y)
{
return x ;
}
int main() {
int x=2;
printf("%d", f(0));
}
所以你有2 x
,全球和本地的main
你会看到1
打印。
由于您没有在本地声明x
会影响全局x
因此范围界定在这里是没有意义的。
2
被打印。
紧接在用参数0
调用f
之前, x
在main
被赋值为2
。
(概念上int x = 1;
在输入main
之前运行。)
这是编译器生成程序集/机器代码的方式。
所以如果你想在主函数范围内使用不同的X,你应该创建一个新的对象,就像在nwp的答案中一样。
链接地址: http://www.djcxy.com/p/82491.html