extern a;
它的作用就是告诉编译器这个变量是在其他文件中定义的(是外援),要是在本文件中
看到它的名字千万别奇怪。
编译器是相信同伙的,所以在编译的时候要是看到a变量时会认为它是存在,不会报错。只有在
链接的时候链接器才会去其它obj文件中寻找a变量的定义(地址),找到则顺利链接,否则报错。
因为编译器只需要知道extern所声明变量的名字就可以了,所以extern int a可以写成 extern a(即省略变量类型)。
并不是所有的变量都能用extern声明,只有全局变量并且没有被static 声明的变量才能声明为extern.而且还要注意extern这个玩意千万不要放在.h文件里,这样你感觉程序没有错误但是就是出现链接错误,extern一定放在cpp文件中,
h文件只负责声明,他其他什么工作也不做,不要赋予h文件太多的功能,这样你都不知道是怎样出的错。
测试过程如下:
在vc++中建立俩个类 test1 和 circle,在test1.h 中定义变量ok
在circle的cpp中声明extern ok变量,他们分别如下:
test1.h
test1.cpp
circle.h
circle.cpp