一、extern
如果函数的声明中带有关键字extern
,是暗示这个函数可能在别的源文件里定义,没有其它作用。
二、extern 和 static
(1) extern 表明该变量在别的地方已经定义过了,在这里要使用那个变量
(2) static 表示静态的变量,分配内存的时候,存储在静态区,不存储在栈上面
static 作用范围是内部作用的关系,和extern有点相反。它和对象本身是分开存储的,extern也是分开存储的,但是extern可以被其他的对象用extern 引用;而static 不可以,只允许作用域内的变量或函数使用它。
extern和static不能同时修饰一个变量;
其次,static修饰全局变量的作用域只能是本身的编译单元,也就是说它的“全局”只对本编译单元有效,其他编译单元则看不到它。
所以一般定义static全局变量时,都把它放在原文件中而不是头文件,这样就不会给其他模块造成不必要的信息污染。