我有这段代码:
#include <stdio.h>
// global variable definition
int x = 0;
void access_global(){
cout << "ACCESSING FROM access_global()" << endl;
if (x > 0){
cout << "LOCAL VARIABLE" << endl;
cout << x << endl;
}
else{
cout << "GLOBAL VARIABLE" << endl;
cout << x << endl;
}
}
int main(int, char*[])
{
// declare new variable in given scope with same name as global variable
int x = 1;
cout << "ACCESSING FROM main()" << endl;
if (x > 0){
cout << "LOCAL VARIABLE" << endl;
cout << x << endl;
}
else{
cout << "GLOBAL VARIABLE" << endl;
cout << x << endl;
}
access_global();
return 0;
}
输出:
ACCESSING FROM main()
LOCAL VARIABLE
1
ACCESSING FROM access_global()
GLOBAL VARIABLE
0
为什么access_global()
无法访问x
范围内的main()
?
是否可以修改access_global()
函数,它将显示x
范围内的主要main()
变量,如果未定义,则显示main()
之外定义的那些变量?如果不可能,请解释原因吗?感谢
答案 0 :(得分:0)
为什么
access_global()
无法访问x
范围内的main()
?
因为main::x
不在access_global
范围内。幸运的是,名称不仅仅是“漏掉”函数的范围。全局x
是它可以看到的唯一x
。
是否可以修改
access_global()
函数,它将显示x
范围内的主要main()
变量,如果未定义,则显示main()
之外定义的那些变量?
不是你想要的方式,不是。 main
中的名称在任何意义上都与access_global
中的名称无关。
像往常一样:因为标准是这样说的。为什么会这样做会受到一些推测,但如果某些函数的含义根据调用上下文中存在的名称而改变,那么它肯定会非常混淆,这在写作时通常无法控制一个功能。如果不可能,请解释原因?
想想如果access_global
从具有某些x
的函数,甚至可能不是int
类型的函数调用一次会发生什么,并且从某个没有函数的函数调用一次本地x
:如果不查看所有呼叫者,您无法预测该功能的作用。这非常不切实际。