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

inf*_*ite 2 c scope global-variables extern

在这段代码中:

#include<stdio.h>

int var=100;

int main()
{
    extern int var;        //Declaration not Definition
    printf("%d\n",var);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

100被印刷,其是什么不正常的,但是,当声明从除去main()中,即使在当时正在使用全局定义.这是怎么回事?这取自K&R,其中说:

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

nik*_*par 5

对于在同一文件或模块中声明的变量,不需要包含extern关键字.全局变量是可见的,main因为它具有全局范围(即文件/模块中的所有函数都可以看到它).

澄清一下,使用extern int x; 告诉编译器一个名为x的int类型的对象存在于某处.知道存在的位置并不是编译器的工作,它只需要知道类型和名称,以便知道如何使用它.一旦编译完所有源文件,链接器就会将x的所有引用解析为它在一个已编译源文件中找到的一个定义.

资源