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语言,函数的声明与定义
函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空 ...
随机推荐
- PHP工程师突破
身边有几个做PHP开发的朋友,因为面试,也接触到不少的PHP工程师,他们常疑虑自己将来在技术上的成长与发展,我常给他们一些建议,希望他们能破突自己,有更好的发展. PHP工程师面临成长瓶颈 先明确我所 ...
- 【MRPT】【icp-slam-live】Vs2013+ cmake3.6.1 + mrpt1.4.0+opencv2.9.4+wxWidget3.0.2环境配置
Win10下Vs2013 + cmake3.6.1 + mrpt1.4.0+opencv2.9.4+wxWidget3.1.0环境配置 所接触过的最令我崩溃的环境配置.之前没有考虑到vs2013 20 ...
- Android Studio新建Jni工程
2.2版本的Android Studio支持新建Jni工程,不用再像以前自己构建工程目录,首先把自己的升级自己的AS到2.2以上 然后打开Tools->Andorid->SDK manag ...
- ajax views
https://julian.pustkuchen.com/en/drupal-7-api-trigger-views-ajax-refresh-javascript-or-php-using-aja ...
- Oct22 实例测试
实例: http://www.runoob.com/jsp/jsp-form-processing.html http://www.runoob.com/jsp/jsp-writing-filters ...
- SAP 用事务码SQVI 做简单报表 .
集团计划总监要去德国参展,要一份离当前日期最近的出口欧美国家产品单价. 需要从A903,MARA,KONP,MATK 这4张表里取数. 1)Tcode:SQVI进入,如图 2) 在快速浏览处输入名称: ...
- Spring框架的反序列化远程代码执行漏洞分析(转)
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- 核心Javascript学习
1. 引言: 1.1. 网页三要素: l HTML(内容) l CSS(外观) l Javascript(行为) 1.2. OOP的相关概念 1). 对象,方法和属性 l 对象就是指"事物 ...
- BeautifulSoup 常用方法
#输出所得标签的‘’属性值 获取 head里面的第一个meta的content值 soup.head.meta['content'] 获取第一个span的内容 soup.span.string 获取第 ...
- 读书笔记1: 资源地址—通用资源的标识符(URI)
例子: https://msdn.microsoft.com/zh-cn/library/system.uri(v=vs.110).aspx 解释:协议://主机[:端口号]/绝对路径[参数] 对应的 ...