c++primer上写
C++程序由多个文件组成,为了让多个文件访问相同的变量,C++区分了声明和定义。
定义写在CPP中,需要被其它文件使用的变量用extern声明在.h文件中。
三种情况例外:
1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;
2)类的定义可放在头文件中。
3)inline函数。
变量的定义(definition)用于变量分配存储空间,还可以为变量指定初始值,在一个程序中,一个变量有且只有1次定义。
变量的声明(declaration)用于向程序表明变量的类型和名字。
注意的是,定义也是声明。当定义变量时,我们声明了它的类型和名字。可以通过使用extern关键字声明已经定义了的变量。
int i;//定义
extern int i;//声明这个变量在外部定义了,但不是定义。
extern声明不是定义,也不分配内存空间,事实上,它只是说明变量定义在程序的其它地方。程序中,变量可以声明多次,但定义只能一次。
如果声明有了初始化,那么它可以被当做定义,即使声明使用了extern关键字。
extern int i = 1; //定义
extern int i; //声明
extern int i = 2; // 重定义,error
只有全局变量并且没有被static声明的变量才能声明为extern。所以,如果你不想自己源文件中全局变量被其他文件引用,你就可以给变量加上static声明。
这里说的是非const的全局变量,如果是const的全局变量,如果想被其他文件访问,需要在定义时,加上extern关键字,表示它可被其他文件声明使用的。否则的话,这个变量只能在它被定义的文件里面被访问,其他文件不能访问。