我对下面的代码有一些疑问
#include<stdio.h>
int i=6;
int main()
{
int i=4;
{
extern int i;
printf("%d",i); //prints 6
}
printf("%d",i); //prints 4
}
Run Code Online (Sandbox Code Playgroud)
我们知道extern关键字表示编译器,变量在外面的某个地方.所以问题是为什么extern关键字访问全局i变量而不是i主函数内的变量?我认为必定存在矛盾,因为两个变量都可用作内部括号作为全局变量.那么extern关键字访问函数外部的变量,还是访问大括号外的变量.
extern并不意味着在当前范围之外,它意味着具有外部链接的对象.自动变量永远不会有外部链接,所以你的声明extern int i不可能引用它.因此它隐藏了它,就像隐藏全局的自动变量一样.