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语言,函数的声明与定义
函数声明与定义 变量: 在讲变量前,先讲一下变量的声明和定义这两个概念. 声明一个变量,意味着向编译器描述变量的类型,但不为变量分配存储空间. 定义一个变量,意味着在声明变量的同时还要为变量分配存储空 ...
随机推荐
- Nginx安装(zhuan)
http://www.nginx.cn/install ************************ nginx可以使用各平台的默认包来安装,本文是介绍使用源码编译安装,包括具体的编译参数信息. ...
- 每日一笔记之3:QTconnect()
刚学习QT的时候,跟着教程做一些简答的实验,教程简单的界面使用UI文件,直接在界面上拖一个按键,在右键go to slot,在编写槽函数. 我以前没学过C++,一直以为这个自动跳转过去的slot函数是 ...
- Linux绝技
find ./ -name *.Annovar.hg19_multianno.vcf.gz |xargs -i cp {} ./bak/ find `pwd` -name "*.depth& ...
- djangoadmin导出csv
from django.contrib import admin from .models import Order,OrderItem from django.http import HttpRes ...
- springside3.1.8打包
地址寻找 https://sourceforge.net/ https://sourceforge.net/projects/springside/files/SpringSide%203.0/3.3 ...
- 显示win7桌面网络.reg
显示win7桌面网络.reg Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\C ...
- 《云中歌》孟石头泡妞大法独家放送,单身汪get起来!!
谁说古代文人雅士只会诗词歌赋.琴棋书画?作为“玉中之王”的公子哥——孟石头泡妞可是个中高手,总结起来都能出一本“泡妞宝典”了,单身的乃们还不赶紧学起来! 第一步:假装自来熟相识,马上开启约会模式 看到 ...
- Qt之坐标系统
简述 坐标系统是由QPainter类控制的,再加上QPaintDevice和QPaintEngine类,就形成了Qt的绘图体系. QPainter:用于执行绘图操作. QPaintDevice:二维空 ...
- 51nod 1065 最小正子段和
题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...
- IE9中Media queries在iframe无效的解决方法
在css中有5个media querie @media screen and(min-width:0px)and(max-width:319px){ body {background-color:re ...