我尝试过这样的事情:
int globalvar=10;
void print ()
{
printf("%d \n",globalvar);
}
int main(){
int globalvar=5;
printf("%d \n",globalvar);
print ();
while (1);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后输出像这样
5
10
Run Code Online (Sandbox Code Playgroud)
我已经得出结论,C在main中创建了一个"globalvar"的LOCAL实例,并用printf打印出的值10初始化.
我没关系,但我对一些新观点感到困惑:
在main之前初始化的globalvar在DS中具有相同内存位置的程序的整个范围,如果在函数中本地定义了一个具有相同名称的变量(ex:main),会发生什么情况, ?
第二个问题与链接器有关:链接器如何处理这两个相同名称的变量,以便它以执行的方式执行?
PS:在低调问题之后,我想说我真的搜索了这个问题并且我没有找到类似的问题,我认为提出这样的问题对其他人有用.我希望我不是误导
我已经得出结论,C在main中创建了一个"globalvar"的LOCAL实例,并用printf打印出的值10初始化.
不,您创建了一个名为globalvarinitialized 的局部变量5.然后使用它printf. print()根本不知道该变量,并使用全局设置为10.
在这种情况下会发生什么情况,在函数中本地定义了同名的变量(例如:main),
局部变量优先.如果要使用全局变量,则应将本地变量命名为不同的,以便它不会发生冲突.
这都在同一个文件中,因此链接器根本不处理这两个变量的相互作用.