C++ extern 关键字 声明变量为全局变量,多文件共享变量
来源:互联网 发布:mcs51单片机是几位 编辑:程序博客网 时间:2024/06/01 09:50
extern 关键字声明多文件共享变量
我们在C++开发中经常会遇到一些场景需要多个cpp文件同时共享一个变量,这个时候有两种选择,1、使用static 关键字;2、使用extern 关键字,而本文着重讲的便是extern 关键字
如何才能共享呢?下面我举一个简单的例子来说明。
我们把所有要共享的变量写在一个globalVar.h文件里面,然后在globalVar.cpp中定义这个变量。这样如果a.cpp或者b.cpp要引用全局变量,只需直接#include”globalVar.h”即可。
//以共享结构体与共享普通变量为例子// globalVar.h#include<string>struct globalStruct{ int m_iX; int m_iY; std::string m_sZ;};extern int globalShareInt;extern globalStruct* globalShareStruct;//这里是声明globalShareStruct这个指针变量,是什么类型的变量都是ok的
// globalVar.cpp//这个文件是用来将我们刚才在globalVar.h声明的变量定义#include "globalVar.h"int globalShareInt=0;//变量定义 globalStruct* globalShareStruct = new globalStruct ();//变量定义
//使用这个多文件共享的变量 引用头文件即可// a.cpp#include "globalVar.h"bool testFunction(){ globalShareStruct->m_iX = 1000; globalShareInt = 1000; return globalShareInt;}
//使用这个多文件共享的变量 引用头文件即可// b.cpp#include "globalVar.h"bool testFunction(){ globalShareStruct->m_iX = -1000; globalShareInt = -1000; return globalShareInt;}
现在两个文件就是共享一个变量了,如果a.cpp中函数先执行,则globalShareInt 这个变量的值为1000;
如果是b.cpp中函数先执行,则globalShareInt 这个变量的值为 -1000;
如此以来就实现变量的多文件共享。
下面我们来讲一些关于变量声明与变量定义的区别:
而讲这个之前,我们要有一些基本的编译原理的知识
1、源代码经过编译之后会生成ELF文件格式(Linux), PE/COFF文件格式(Windows)的可执行文件,linux下为(a.out),Windows下为(*.exe)
2、在这些可执行文件中,以exe文件为例,会有很多个段(segment),最主要的有 text段, data段,bss段等
3、text段可以理解源代码经过编译生成汇编指令代码存在text段里面,供后面机器的pc(程序计数器)读取
4、data段是用来存放已经初始化的全局变量和初始化的静态变量,
5、bss段是用来存放未初始化的全局变量与未初始化的静态变量
我们这里要讲的就是全局变量,局部变量一般都是存放在栈(stack)中的。
C++中变量的声明与定义
int a;//变量定义int a = 10;//变量定义extern int a;//变量声明
+ 声明的变量(没有初始化而且有extern关键字)经过编译后是存储在bss段中的,而在这个段中的变+ 量是没有申请内存,它只是记录了它需要多少内存空间,也就是说它本身需要 4 个字节的内存空间,+ 但是它在bss段中只用了 1个字节来记录信息。那你可能会问那要是要用它怎么办呢?这个问题我们+ 不用关心,因为这个是编译器该解决的问题。我们只需要知道它存储在bss段,而且没有申请内存,+ 只是在bss段记录信息---这个便是变量的声明。
+ 变量的定义,如上面所示,全局的变量的定义,经过编译之后是存放在data段的,这个段是已经为每+ 一个变量有申请好了特定的内存空间,申请好了的内存空间我们就可以认为它是定义的变量
我们一开始学习C++的时候很容易将变量的声明与变量的定义弄混淆,所以希望本文能给读者分清变量的声明与定义的区别,如果还是看不懂,个人建议可以参考一下函数的声明与定义去理解变量的声明与定义。
extern关键字还有其他的一些用法,具体大家可以参考下面这一篇文章
C 语言中 extern 关键字详解
文章若有误差出错,欢迎大家批评指正!
- C++ extern 关键字 声明变量为全局变量,多文件共享变量
- C/C++变量声明——extern关键字
- extern声明跨文件变量
- 全局变量、局部变量、extern
- 全局变量 局部变量和关键字static和extern的使用
- 全局变量、局部变量与关键字static、extern的使用分析
- 声明外部变量 extern
- extern声明外部变量
- extern声明变量详解
- extern 声明外部变量
- extern 变量声明,
- 用extern声明变量
- C-变量的声明与定义以及关键字extern的用法
- extern 声明全局变量,多文件使用
- 变量的声明与定义以及关键字extern的用法
- 变量的声明与定义以及关键字extern的用法
- 变量的声明与定义以及关键字extern的用法
- 变量的声明与定义以及关键字extern的用法
- HDU1176免费馅饼
- java垃圾回收机制
- css3清除浮动
- django发邮件
- SQL语句之查询基础(一)
- C++ extern 关键字 声明变量为全局变量,多文件共享变量
- Esp8266学习之旅③ 利用 " 软件定时器 " 定时0.5秒闪烁点亮一盏LED。(附带demo)
- Android开发经验谈-很少有人会告诉你的Android开发基本常识
- (面试题四)【JAVAse部分】集合框架
- jq代码学习7--DOM操作
- 欢迎使用CSDN-markdown编辑器
- replication factor: 1 larger than available brokers: 0 问题解决方案
- 【LibUIDK界面库系列文章】RC控件语法
- 服务器刚部署好IIS,网站不能访问