原文链接:http://blog.csdn.net/itisyang/article/details/50435504
在一个c文件A中定义了全局变量,在另一个c文件B中定义同名全局变量,对A和B分别编译,都可以正常通过编译,但是进行链接的时候,却出现了错误。
在编译阶段,各个文件中定义的全局变量相互是不透明的,编译A时觉察不到B中也定义了该全局变量,同理B也一样。
在链接阶段,要将各个文件的内容“合为一体”,因此,如果某些文件中定义的全局变量名相同的话,在这个时候就会出现重复定义的错误。
extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”
以下程序可以成功编译执行:
//A.cpp
extern int i;
void main()
{
i=100;//试图使用B中定义的全局变量
}
//B.cpp
int i;
注意:不同文件使用同一全局变量时,只能在初始定义处初始化该变量,否则会出现重复定义错误。