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

在C语言,C++和makefile中,include所做的事情实际上是将被include的文件内容原样复制到使用include的文件中

因此在一个头文件中定义一个static变量,然后该头文件被多个cpp文件包含后,包含该头文件的cpp文件实际上会各自拥有独立的同名变量(等同于分别在多个cpp文件中定义同名static变量)

具体验证

在头文件test.h中定义静态变量static int a

//头文件test.h
#pragma once


static int a;

在头文件t0.h中包含头文件test.h,并声明一个可以改变变量a的函数

//头文件t0.h
#pragma once


void change();
//t0.cpp文件
#include"test.h"
#include<iostream>
#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中定义static变量,该变量只在定义的cpp文件中有效)

在头文件中定义全局变量

根据include的性质,如果要在头文件中定义一个全局变量是不可以直接定义的。正确的做法应该是在头文件中以extern声明一个全局变量,并在包含该头文件的其中一个源文件中定义该变量,这样其他文件就可以正常使用该全局变量了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值