我的理解是,在头文件中只能声明变更,而不会真正为这个变更分配相当的存储空间。比如你在一个头文件中声明了一个变量
extern int i;
那么你就可以使用这个变量了,这在编译时告知编译器i是个整型变量,其已经被定义了,可以使用,但并不确定在哪里定义的。当进入链接阶段时,链接器会处理这个变量符号,找到真正定义它的地方并将该符号与它的实际定义位置关联,这很可能是在包含该头文件的.cpp文件生成的lib文件中,也有可能在其它的lib文件中。这样对于变量i全世界就只有一份了,不会出现在多个lib文件中存在多个副本,导致其实际上成了非全局变量。