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";
- }
- /**************************/
也可以把全局变量的声明和定义放在一起,这样可以防止忘记了定义,如上面的extern char g_szBuffer[g_nBufferSize]; 然后把引用它的文件中的#include "res.h"换成extern char g_szBuffer[];。
(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中
Fr:http://blog.csdn.net/candyliuxj/article/details/7853938
C++全局变量的声明和定义相关推荐
- 基于C++全局变量的声明与定义的详解
(1)编译单元(模块) 在VC或VS上编写完代码,点击编译按钮准备生成exe文件时,编译器做了两步工作: 第一步,将每个.cpp(.c)和相应的.h文件编译成obj文件: 第二步,将工程中所有的obj ...
- 全局变量的声明、定义及用法
全局变量的声明.定义及用法 文章目录 全局变量的声明.定义及用法 1. 编译单元(模块) 2. 声明和定义 3. extern 作用 4. 全局变量(extern) 4.1 如果直接将声明和定义都放在 ...
- 静态全局变量的声明与定义
先引用一段介绍,原文:https://blog.csdn.net/li15809284891/article/details/54923273 static: 用static修饰的变量,在其所限定的作 ...
- C++中的全局变量声明和定义
1.全局变量 全局变量在整个源文件的作用域都是有效的,只需要在一个源文件中定义全局变量,在其他不包含全局变量定义的源文件中用extern关键字再次声明这个全局变量即可. 也可以在一个源文件中定义这个全 ...
- [java] java全局变量 声明和定义
参考:https://blog.csdn.net/lilil371324/article/details/51241580 JAVA全局变量:静态变量,实例变量(即在类体中定义的变量), 静态变量:s ...
- JAVA 全局变量 声明与定义
JAVA全局变量(或称成员变量)可分两种,一种是静态变量,另一种是实例变量,即在类体中定义的变量,有三点得注意: 一.成员变量不能在类体中先声明(定义)后赋值,但静态变量可以先在类体中声明,然后在方法 ...
- C++ : 编译单元、声明和定义、头文件作用、防止头文件在同一个编译单元重复引用、static和不具名空间...
转 自:http://www.cnblogs.com/rocketfan/archive/2009/10/02/1577361.html 1. 编译单元:一个.cc或.cpp文件作为一个编译单元,生成 ...
- [C++再学习系列] 变量的声明、定义与extern关键字
变量的声明与定义: A definition of a variable allocates storage for thevariable and may also specify an initi ...
- 内存四域,变量声明和定义,寄存器,c内嵌汇编,auto,堆栈,常量,静态变量
1.内存四大区域 2.在程序中,变量的声明可以有多份,定义只能有一份 3.寄存器在cpu里面,没有地址 4.c语言内嵌汇编语言 5.auto变量 自动分配内存,自动释放内存. 6.栈的大小由编译 ...
最新文章
- linux怎么和宿主机同步时间,Linux 中设置和同步时间
- 递归删除父节点及所有子节点(转)
- 【UGV】Mec 麦轮版小车驱动程序示例
- 起点计算机网,《零起点计算机》网第5课.pdf
- 漫步微积分十二——隐函数、分数指数
- android画面传输到电视,如何将手机内容投屏到电视上?
- java正则表达式所有字符串_“JAVA”正则表达式如何匹配所有符合要求的子字符串?...
- 商业智能数据营销该怎么做?
- linux 怎么添加文件类型,如何在Linux/Unix上添加基于文件类型的文件扩展名?
- 机房巡检知识点(一)
- 数据库系统工程师考试的考点是哪些?
- 北斗三号频点_海格通信发布国内首批北斗三号双模应用专用芯片
- airflow实现Java定时任务,AirFlow定时调度执行Talend ETL任务
- 老版本的linux内核中mtd test 出现 mtd_oobtest: error: verify failed at 0xXXXX 问题
- Invalid parameter passed to C runtime function.
- 学习webworker
- smbd配置windows访问linux centos的共享文件
- Linux操作系统学习笔记【入门必备】
- 适用场景:All kinds of GCs
- 3.PMAC硬件-组成和接口及安装