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