代码之家  ›  专栏  ›  技术社区  ›  infinite

即使没有声明也在使用全局定义

  •  2
  • infinite  · 技术社区  · 7 年前

    在此代码中:

    #include<stdio.h>
    
    int var=100;
    
    int main()
    {
        extern int var;        //Declaration not Definition
        printf("%d\n",var);
        return 0;
    }
    

    100 打印时没有任何异常,但当声明从 main() ,即使如此,仍在使用全局定义。这是怎么发生的?这是从K&R表示:

    (全局)变量还必须在每个要访问它的函数中声明。

    3 回复  |  直到 7 年前
        1
  •  4
  •   Community CDub    5 年前

    无需包括 外部人员 在同一文件或模块中声明的变量的关键字。全局变量对可见 main 因为它具有全局范围(即文件/模块中的所有功能都可以看到)。

    要澄清,请使用extern int x;告诉编译器某处存在一个名为x的int类型的对象。编译器的任务不是知道它存在于何处,它只需要知道类型和名称,以便知道如何使用它。编译完所有源文件后,链接器将把x的所有引用解析为它在其中一个已编译源文件中找到的一个定义。

    Source

        2
  •  2
  •   sg7 Krafty Coder    7 年前

    在中:

      #include<stdio.h>
    
      int var=100;
    
      int main(){...}
    

    这个 var 具有全局文件作用域。这个 main 不需要 extern int var; 了解它。 外部内部变量; 对其他人来说很重要 *.c 文件通知其: 风险值 在其他地方定义。

    注:

    使用全局变量通常被认为是不好的做法,正是因为它们的非局部性:全局变量可以从任何地方修改。

    全局变量还使模块集成变得困难,因为其他人编写的软件可能使用相同的全局名称,除非通过协议或命名约定保留名称。

        3
  •  1
  •   Joe Zhou    7 年前

    另一个提示是如果您想使用 extern int var; 在另一个文件中,可以在该文件中声明这段代码。