c++中在头文件中定义static变量

在C语言,C++和中,所做的事情实际上是将被的文件内容原样复制到使用的文件中
因此在一个头文件中定义一个变量,然后该头文件被多个cpp文件包含后,包含该头文件的cpp文件实际上会各自拥有独立的同名变量(等同于分别在多个cpp文件中定义同名变量)
具体验证
在头文件test.h中定义静态变量 int a
//头文件test.h#pragma oncestatic int a;
在头文件t0.h中包含头文件test.h,并声明一个可以改变变量a的函数
//头文件t0.h#pragma oncevoid change();
//t0.cpp文件#include"test.h"#include#include"t0.h"void change(){a = 100;std::cout<< "in t0.cpp" << "a = " << a << " &a = " << &a << std::endl;}
在main.cpp中包含test.h和t0.h
#include"test.h"#include"t0.h"using namespace::std;int main(int argc, char* argv[]){a = 200;change();cout << "in main" << " a = " << a << "&a = " << &a << endl;system("pause");return 0;}
运行结果为:
根据运行结果我们可以看出,两个cpp文件中的同名变量a实际上是只在自己头文件范围内有效的(有不同的地址,也就是等同于在各自的cpp中定义变量,该变量只在定义的cpp文件中有效)
在头文件中定义全局变量
【c++中在头文件中定义static变量】根据的性质,如果要在头文件中定义一个全局变量是不可以直接定义的 。正确的做法应该是在头文件中以声明一个全局变量,并在包含该头文件的其中一个源文件中定义该变量,这样其他文件就可以正常使用该全局变量了 。