当全局变量和局部变量具有相同名称时访问全局变量

nik*_*iko 2 c extern

我对下面的代码有一些疑问

  #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关键字访问函数外部的变量,还是访问大括号外的变量.

Ste*_*sop 5

extern并不意味着在当前范围之外,它意味着具有外部链接的对象.自动变量永远不会有外部链接,所以你的声明extern int i不可能引用它.因此它隐藏了它,就像隐藏全局的自动变量一样.