C++中全局变量的那些事儿
C/C++中的变量分为全局变量、静态全局变量、局部变量和静态局部变量,在《C/C++中静态局部变量的特点与应用》中我们介绍过静态局部变量,今天我们的目标是全局变量。
单个文件中的全局变量
简单一点说,全局变量就是在函数外面定义的变量,下面是一个最简单的实例,一共定义了两个int型的全局变量a和b,这两个全局变量定义的位置不大相同,a定义在函数fun1之前,而b定义在之后,a和b都定义在函数main之前,从使用情况看全局变量a可以在其后面的所有函数中使用,而全局变量b只能在函数main中使用,不能在其定义之前的函数fun1中使用。因此,我们可以得出这样的结论:全局变量的作用域为其定义位置开始,至文件结尾,也即只有文件作用域。
#include “stdio.h”
int a = 1; //这就是个全局变量啦
void fun1() //这个函数只能使用全局变量a,不能用b
{
a++;
printf(“a=%d\n“,a);
}
int b = 2; //这也是个全局变量
void main() //这里a b都可以用
{
fun1();
a++;
printf(“a=%d,b=%d\n“,a,b);
getchar();
}
让全局变量在多个文件中有效
前面讲过,全局变量的作用域起始于定义的地方直到文件结尾,那岂不是就没法在其他文件中使用了啊。从C/C++现在NB的程度上看,这个事情是不可能的,要是这样那还了得。为了使全局变量的作用域扩大到多个文件中,C++中提供了extern关键字。
下面实例代码中的extern int g_c;是做一个声明,说这个变量g_c是一个全局变量啊,你们随便用,g_c本身在其他文件中定义(在本文件中定义也可以,不过要保证其他文件中没有定义过),这样就将全局变量的作用域扩大到多个文件了。
全局变量只要在一个文件中定义后,在其他需要使用的源文件中只要使用extern关键字,即可在该文件中使用,概括下就是:extern扩展全局变量的作用域
#include “stdio.h”
extern int g_c; //声明这是一个外部全局变量
int g_a = 1; //全局变量
void fun1()
{
g_a++;
printf(“g_a=%d,g_c=%d\n“,g_a,g_c);
}
int g_b = 2; //全局变量
void main()
{
fun1();
g_a++;
printf(“g_a=%d,g_b=%d,g_c=%d\n“,g_a,g_b,g_c); //这里直接就用上g_c了
getchar();
}
上做了一点小小的更改,把所有的全局变量全部加上g_前缀,用以表示这是一个全局变量。
限制全局变量只能在一个文件中有效
刚才好不容易才把全局变量的作用域扩展到多个文件了,干嘛现在又要限制呢?这是因为虽然全局变量定义后不使用extern关键字的话只能在本文件中使用,但是如果你在其他文件中定义同样名字的全局变量的话,那是不允许滴(在链接的时候会出错),至于详细原因以后再说。
为了能够实现在不同的文件中使用相同名字的全局变量,static关键字就派上用场了,在C/C++中静态局部变量的特点与应用中我们已经说过static关键字了,用static修饰的局部变量只能在定义变量的函数中使用,那么用static修饰的全局变量也就只能在定义其的文件中使用了,这就是传说中的静态全局变量。
extern int g_c; //其他文件中定义的全局变量
static int g_a = 1; //静态全局变量 限本文件中使用
void fun1()
{
g_a++;
printf(“g_a=%d,g_c=%d\n“,g_a,g_c);
}
int g_b = 2; //全局变量
void main()
{
fun1();
g_a++;
printf(“g_a=%d,g_b=%d,g_c=%d\n“,g_a,g_b,g_c);
getchar();
}
通过static修饰后,我们就可以在不同的文件中使用相同名字的全局变量而不会出现链接错误了。
原创文章请注明转载于知蚁博客,本文地址:http://www.letuknowit.com/archives/87
C++中全局变量的那些事儿的更多相关文章
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- python中全局变量和局部变量的一个小坑
python 中全局变量和局部变量在使用过程中的一个容易出错的地方 什么是全局变量 python中,在函数外部声明的变量可以叫做全局变量. x = 10 def fn1(): pass fn1() 什 ...
- ajax实现给JavaScript中全局变量赋值(转)
原文地址:ajax实现给JavaScript中全局变量赋值 问题简化: <script type="text/javascript"> var a=1 ; functi ...
- PHP中全局变量global和$GLOBALS[]的区别分析
$GLOBALS['var']是外部的全局变量本身,global $var是外部$var的同名引用或者指针 一.举例比较 例一: 复制代码 代码如下: <?php $var1 = 1; ...
- PHP和JS中全局变量和局部变量
一,PHP中全局变量和局部变量 php与C++中对全局变量和局部变量定义类似,全局变量:函数外定义的变量,在全局通用:局部变量:在函数内定义的变量,只在函数内有效.PHP中变量范围跨越了include ...
- Python 中全局变量的实现
一.概述 Python 中全局变量的使用场景不多,但偶尔也有用武之处. 如在函数中的初始化,有时需要从外部传入一个全局变量加以控制.或者在函数中,使用连接池时,也可能有使用全局变量的需要. 广义上的全 ...
- Go语言 进程、线程、轻量级进程、协程和go中的Goroutine 那些事儿
原文:http://www.cnblogs.com/shenguanpu/archive/2013/05/05/3060616.html 电话面试被问到go的协程,曾经的军伟也问到过我协程.虽然用py ...
- VUE中全局变量的定义和使用
目录 VUE中全局变量的定义和使用 1.工作中遇到的两类问题 1.1 状态值(标志) 1.2 传递字段 2.解决方法 2.1 VUEX 2.2 使用全局变量法管理状态与字段值 3.具体实现 3.1创建 ...
- php中全局变量global和超全局变量$GLOBALS
php中全局变量global和超全局变量$GLOBALS 1.global Global的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括include或require ...
随机推荐
- js关闭页面(兼容浏览器)
function closewindow() { window.opener = null; window.open("", "_self"); window. ...
- IE下同样的$.ajax()被调用两次,只能执行一次(第一次)
今天发现了这个问题,仅限于IE下所有浏览器包括Edge 百度了一下原来问题就在这句话:如果第二次请求与第一次请求完全相同,会直接从缓存获取. 那么就在请求时让URL变得不一样吧 $.ajax({ ty ...
- Linux磁盘与文件系统管理
df df(disk free) 功能说明:显示磁盘的相关信息.语 法:df [-ahHiklmPT][--block-size=<区块大小>][-t <文件系统类型>][-x ...
- python之else总结
python中除了if...elif...else..还有while...else, for...else..., try...except...else...finally... 不管哪种else, ...
- 从零开始学ios开发(十三):Table Views(下)Grouped and Indexed Sections
在前面2篇关于Table View的介绍中,我们使用的Style都是Plain,没有分组,没有index,这次学习的Table View和iphone中的通讯录很像,有一个个以字符为分割的组,最右边有 ...
- java package and import
1.Package Package类的主要作用是解决命名冲突.package中所存放的所有文件,一般分一下就分这三种 1,java程序源文件,扩展名为.java. 2,编译好的java类文件,扩展名为 ...
- 十二、BOOL冒泡
int main(){ int a[5] = {5,2,3,4,1}; //需要一个可以告诉我们没有交换的东西 //YES:交换 //NO:未交换 ...
- OC的类方法、对象方法和函数
OC语言中的方法和函数是有区别的:类内部叫方法,单独定义的叫函数,定义的格式也不同 类方法:+ (void) 方法名.对象方法:- (void) 方法名.函数:void 函数名(参数列表) #impo ...
- C#之多态
多态是面向对象编程中三大机制之一,其原理建立在"从父类继承而来的子类可以转换为其父类"这个规则之上,换句话说,能用父类的地方,就能用该类的子类.当从父类派生了很多子类时,由于每个子 ...
- 3573: [Hnoi2014]米特运输 - BZOJ
Description米特是D星球上一种非常神秘的物质,蕴含着巨大的能量.在以米特为主要能源的D星上,这种米特能源的运输和储存一直是一个大问题. D星上有N个城市,我们将其顺序编号为1到N,1号 ...