将全局变量定义为c中的局部变量

Moh*_*awy -2 c

我尝试过这样的事情:

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初始化.

我没关系,但我对一些新观点感到困惑:

  1. 在main之前初始化的globalvar在DS中具有相同内存位置的程序的整个范围,如果在函数中本地定义了一个具有相同名称的变量(ex:main),会发生什么情况, ?

  2. 第二个问题与链接器有关:链接器如何处理这两个相同名称的变量,以便它以执行的方式执行?

PS:在低调问题之后,我想说我真的搜索了这个问题并且我没有找到类似的问题,我认为提出这样的问题对其他人有用.我希望我不是误导

Mat*_*ead 7

我已经得出结论,C在main中创建了一个"globalvar"的LOCAL实例,并用printf打印出的值10初始化.

不,创建了一个名为globalvarinitialized 的局部变量5.然后使用它printf. print()根本不知道该变量,并使用全局设置为10.

在这种情况下会发生什么情况,在函数中本地定义了同名的变量(例如:main),

局部变量优先.如果要使用全局变量,则应将本地变量命名为不同的,以便它不会发生冲突.

这都在同一个文件中,因此链接器根本不处理这两个变量的相互作用.