extern
1、用extern将.h中的变量提升为整个项目的全局变量,这样这个.h中的extern的变量就可以在别的文件中使用定义,只要包含头文件即可。这是extern的主要一个作用。
在text1.h中:
extern char[6] str;
在text1.cpp中定义
str="abcde";
在其他文件text2.h中只要#include"text1.h"
就可以直接使用str="defgh";
2、真理:在头文件中只做声明。
如果在头文件中也做了定义,如上在text1.h中extern char[6] str="abcde"
然后再text1.cpp中会包含一次text1.h,就包含一次str的定义
在text2.h中要是再次包含#include "text1.h"这样str就又定义了一次,会出现错误
所以真理
3、在2的基础上,如果非要把定义放在.h中,在text2.h中就不要再#include“text1.h”了
可以用extern char[6]str,这样只是把text1.h中的str变量扩展到这个text2.h文件中了,但是如果在text2.h中,如果
要使用text1.h中的其他全局变量和方法,就只能一一extern了,这样会很麻烦
4、static在声明的时候就要定义,并且static修饰的变量的作用域是本模块,
test1.h中
static char[6] str="abcde";
text1.cpp中#include "text1.h" str="cdefg";
text2.h中#include "text1.h" cout<<str<<endl;
虽然text2中也可以使用str,但是这里的str是把text1中str复制了一份,相当于在自己的范围内又定义了一个变量,恰巧是名字也是str而已
真理:static变量的声明和定义放在.cpp中,这样可以防止污染别的模块文件