C++全局变量的声明和定义
(2)声明与定义
- /**********res.h声明全局变量************/
- #pragma once
- #include <QSemaphore>
- const int g_nDataSize = 1000; // 生产者生产的总数据量
- const int g_nBufferSize = 500; // 环形缓冲区的大小
- extern char g_szBuffer[]; // 环形缓冲区
- extern QSemaphore g_qsemFreeBytes; // 控制环形缓冲区的空闲区(指生产者还没填充数据的区域,或者消费者已经读取过的区域)
- extern QSemaphore g_qsemUsedBytes; // 控制环形缓冲区中的使用区(指生产者已填充数据,但消费者没有读取的区域)
- /**************************/
- /**********res.cpp定义全局变量************/
- #pragma once
- #include "res.h"
- // 定义全局变量
- char g_szBuffer[g_nBufferSize];
- QSemaphore g_qsemFreeBytes(g_nBufferSize);
- QSemaphore g_qsemUsedBytes;
- /**************************/
- /**********类ConsumerThread使用全局变量************/
- #include "consumerthread.h"
- #include "res.h"
- #include <QDebug>
- ConsumerThread::ConsumerThread(QObject* parent)
- : QThread(parent) {
- }
- ConsumerThread::ConsumerThread() {
- }
- ConsumerThread::~ConsumerThread() {
- }
- void ConsumerThread::run() {
- for (int i = 0; i < g_nDataSize; i++) {
- g_qsemUsedBytes.acquire();
- qDebug()<<"Consumer "<<g_szBuffer[i % g_nBufferSize];
- g_szBuffer[i % g_nBufferSize] = ' ';
- g_qsemFreeBytes.release();
- }
- qDebug()<<"&&Consumer Over";
- }
- /**************************/
(5)静态全局变量(static)
- /***********res.h**********/
- static char g_szBuffer[6] = "12345";
- void fun();
- /************************/
- /***********res.cpp**********/
- #include "res.h"
- #include <iostream>
- using namespace std;
- void fun() {
- for (int i = 0; i < 6; i++) {
- g_szBuffer[i] = 'A' + i;
- }
- cout<<g_szBuffer<<endl;
- }
- /************************/
- /***********test1.h**********/
- void fun1();
- /************************/
- /***********test1.cpp**********/
- #include "test1.h"
- #include "res.h"
- #include <iostream>
- using namespace std;
- void fun1() {
- fun();
- for (int i = 0; i < 6; i++) {
- g_szBuffer[i] = 'a' + i;
- }
- cout<<g_szBuffer<<endl;
- }
- /************************/
- /***********test2.h**********/
- void fun2();
- /************************/
- /***********test2.cpp**********/
- #include "test2.h"
- #include "res.h"
- #include <iostream>
- using namespace std;
- void fun2() {
- cout<<g_szBuffer<<endl;
- }
- /************************/
- /***********main.cpp**********/
- #include "test1.h"
- #include "test2.h"
- int main() {
- fun1();
- fun2();
- system("PAUSE");
- return 0;
- }
- /************************/

- extern const char g_szBuffer[]; //写入 .h中
- const char g_szBuffer[] = "123456"; // 写入.cpp中
版权声明:本文为博主原创文章,未经博主允许不得转载。
C++全局变量的声明和定义的更多相关文章
- C++中全局变量的声明和定义
原文链接:http://blog.csdn.net/candyliuxj/article/details/7853938 (1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文 ...
- 变量声明和定义及extern 转载
在讨论全局变量之前我们先要明白几个基本的概念: 1. 编译单元(模块): 在IDE开发工具大行其道的今天,对于编译的一些概念很多人已经不再清楚了,很多程序员最怕的就是处理连接错误(LINK ER ...
- 多个".h"文件中声明及定义 全局变量和函数
一.".h"文件必须以如下格式书写 例:文件<CZ_efg_hi.h"> ------------文件内容----------- #ifndef CZ_Efg ...
- C++中重定义的问题——问题的实质是声明和定义的关系以及分离式编译的原理
这里的问题实质是我们在头文件中直接定义全局变量或者函数,却分别在主函数和对应的cpp文件中包含了两次,于是在编译的时候这个变量或者函数被定义了两次,问题就出现了,因此,我们应该形成一种编码风格,即: ...
- c++声明与定义
c++声明与定义 声明是将一个名称引入程序.定义提供了一个实体在程序中的唯一描述.声明和定义有时是同时存在的. 如 int a; extern int b=1; 只有当extern中不存在初始化才是 ...
- [转载]C++中声明与定义的区别
C++学了这么多年你知道为什么定义类时,类的定义放在.h文件中,而类的实现放在cpp文件中.它们为什么能够关联到一起呢?你知道什么东西可以放在.h文件中,什么不能.什么东西又可以放在cpp文件中.如果 ...
- 关于C++的变量和类的声明和定义
什么是变量?变量或者叫对象,是一个有具名的.可以供程序操作的存储空间.这里具名是指变量是有名字的,可供操作是指能进行加减乘除或者输入输出等操作,存储空间则是指有一块属于它的内存空间. 为了便于说明,标 ...
- C语言的声明和定义
在程序设计中,时时刻刻都用到变量的定义和变量的声明,可有些时候我们对这个概念不是很清楚,知道它是怎么用,但却不知是怎么一会事. 下面我就简单的把他们的区别介绍如下: 变量的声明有两种情况: (1)一种 ...
- C语言,函数的声明与定义
函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空 ...
随机推荐
- Pexpect模块的安装
Pexpect模块的安装 下载地址:https://pypi.python.org/pypi/pexpect/ 解压后在目录下运行:python ./setup.py install (必须是root ...
- foreach 相关
20 Nov 08 深入理解PHP原理之foreach 作者: Laruence( ) 本文地址: http://www.laruence.com/2008/11/20/630.html 转载请注 ...
- js 一些技巧
转自 http://blog.csdn.net/lin49940/article/details/1703533 1. oncontextmenu="window.event.returnV ...
- (转)HashMap分析
原文地址:http://www.cnblogs.com/ITtangtang/p/3948406.html HashMap的数据结构 HashMap的底层主要是基于数组和链表来实现的,它之所以有相当快 ...
- armp启动
1.启动apahcehttpd.exe -k starthttpd.exe -k restart 重启httpd.exe -k install 安装 2.php启动apache.conf文件添加:Lo ...
- JAVA智能设备基于OpenGL的3D开发技术 之AABB碰撞检测算法论述
摘要:无论是PC机的3D还是智能设备应用上,碰撞检测始终是程序开发的难点,甚至可以用碰撞检测作为衡量3D引擎是否完善的标准.现有许多3D碰撞检测算法,其中AABB碰撞检测是一种卓有成效而又经典的检测算 ...
- Javascript脚本应该放在哪里?
1.<head> <srcipt>在被调用的时候才执行(页面加载前执行)</script> </head> 2. <srcipt>在被调用的 ...
- cookie、sessionStorage、localStorage区别
相同:不管sessionStorage localStorage 还是 cookie 都是存储用户数据的. 不同: 1.cookie的存储空间小, cookie的数据是会通过http请求带到服务器的( ...
- OID,主键生成策略,PO VO DTO,get和load区别,脏检查,快照,java对象的三种状态
主键生成策略 sequence 数据库端 native 数据库端 uuid 程序端 自动赋值 生成的是一个32位的16进制数 实体类需把ID改成String 类型 assigned 程序端 需手 ...
- mvc学习记录
1.关于mvc中的session在controller中传递 在用mvc开发新项目的时候,不久就遇到一个头大的问题,session在controller中传递居然出现空值,但明明一开始就赋值了,通过度 ...