全局变量、static全局变量、全局常量使用方法
来源:互联网 发布:小怪兽 知乎 编辑:程序博客网 时间:2024/06/08 11:26
以vc/vs开发的应用程序为例
1.全局变量
全局变量的使用条件是,要加入全局变量的位置除了.h文件,还必须有.cpp文件,添加格式如下:
.h文件中添加:
extern int g_nvalue;
.cpp文件中添加:
int g_nvalue = 9;
使用时:
#include "头文件"extern int g_nvalue;
实际c++代码经常有下面几种情况,第一种是公共位置.h和.cpp文件都有的,如vc/vs开发的程序,包含stdatx.h和stdafx.cpp,在这两个文件里按照上述方式添加即可;第
二种是公共位置是用户自己定义的只含有.h文件,这种情况只能自己手动添加.cpp文件;还有一种是只含有.cpp文件的,如纯c/c++代码的main.cpp文件,这种情况全局变量就不能定义在main.cpp里,需要在其他文件添加即可
错误情况(以vc/vs开发为例):
在stdafx.h中添加
int g_nvalue = 9;
然后把它当做全局变量使用,没有使用的使用,编译能够正常编过,但是有任何位置使用它,不管使用的地方有没有加extern int g_nvalue,你会发现编译都会报错“重定义“,即使定义全局变量的地方加了防止头文件重复的宏,结果也是这样,因为公共头文件已经被很多文件包含了
当然网上有人说在声明的地方改为extern int g_nvalue=9,使用的地方不使用#include包含头文件,只加入extern int g_nvalue,但是这样公共头文件中其他内容就使用不了了,所以也不行
2.static全局变量
static全局变量的作用域是定义的源文件,只被初始化一次,使用格式如下:
在使用的.cpp文件中加入:
static int g_snValue = 9;
由于它只定义的文件中起作用,所以使用也只能在定义的.cpp文件中
错误情况:
a.h中static int g_snValue = 9;
a.cpp中#include "a.h"void fun(){ g_snValue = 8; cout <<&g_snValue << " " <<g_snValue <<endl;}
b.cpp中#include "a.h"void fun2(){ cout <<&g_snValue << " " <<g_snValue <<endl;}
int _tmain(int argc, _TCHAR* argv[]){fun(); fun2();system("pause");return 0;}
输出结果不一样,原因:static全局变量定义在.h中,通过.cpp访问的是该值的拷贝,即会单独分配一块内存,并将该值拷贝一份,.cpp中所做的任何更改都不会对原值造成任何影响,所以static全局变量一般定义在.cpp中,防止造成信息污染,任何外部想访问值的内容,可以通过在.h中添加新的函数,获取.cpp的静态值的内容即可
3.全局常量
const单独使用时,其特性与static一样(每个编译单元中地址都不一样,不过因为是常量,也不能修改,所以就没有多大关系)
- 全局变量、static全局变量、全局常量使用方法
- 全局变量 const常量 static
- [笔记]PEI只有全局常量,没有全局变量
- 全局变量和全局static变量的区别。
- 常量,全局变量
- static全局变量 & 全局变量
- VC++中全局变量、全局常量、全局结构体的定义
- VC++中全局变量、全局常量、全局结构体的定义
- static 全局变量和普通全局变量
- static 全局变量和普通全局变量
- 有关static的全局变量、局部变量,全局函数、局部函数
- static全局、局部变量,全局变量及局部变量
- QT 全局变量 全局 函数
- 魔术常量,超全局变量
- 静态、常量、局部、全局变量
- php中的变量,常量,全局变量,超全局变量
- 全局变量与static
- static 变量 全局变量
- 'find' and 'locate' in linux to look up files
- SQL中的case when then else end用法
- 总结
- Maven命令及生命周期
- [MYSQL -20]更新和删除数据
- 全局变量、static全局变量、全局常量使用方法
- linux之top
- caffe blob类用法详解
- maven常见问题总结
- 安卓JNI开发总结
- thinking in java——初始化与清理
- Android 仿今日头条、网易新闻的频道管理
- 面试准备之-海量数据处理题目
- Hibernate中fetch和lazy介绍