正确声明全局变量

原创 2007年09月19日 09:48:00
通常我们都不太赞成使用全局变量,但有时确实也避免不了。每当使用全局变量或对象时,决不要在头文件中实例化,因为头文件一般都被包含(#include)在几个源文件中。这样,链接器将扫描到相同对象的多个实例并报错。必须在单个源文件中实例化全局变量或对象,只有这样才能保证它只被定义一次,而与工程中使用的源文件数目无关。所有其它的存取该全局对象的源文件和头必须以extern方式来声明。下面是一个例子:

// File a.h
/*仅仅声明; x 的定义在另外一个源文件中*/

extern int x;

struct Counter
{
   Counter() {++x;}
   ~Counter() {--x;}
};

// File b.cpp
int x; //定义全局变量

// File main.cpp
#include "a.h"
int main()
{
   Counter count;
   cout<<"value of x is: "<<x;
}

两个源文件 b.cpp 和 main.cpp 被单独编译。链接时,链接器确定所有定义在b.cpp文件中对x的引用。
 

相关文章推荐

c++全局变量的正确声明

C++中全局变量声明错误情况 造成LNK2005错误主要有以下几种情况:      1.重复定义全局变量。可能存在两种情况:      A、对于一些初学编程的程序员,有时候会以为需要使用...

JavaWeb一些简单操作(六) --- JS中声明全局变量

一、JS中声明全局变量主要分为显式声明或者隐式声明下面分别介绍。 1、使用var(关键字)+变量名(标识符)的方式在function外部声明,即为全局变量,否则在function声明的是局部变量。该...

C语言 全局变量定义与声明

用C语言编写程序的时候,我们经常会遇到这样一种情况:希望在头文件中定义一个全局变量,然后包含到两个不同的c文件中,希望这个全局变量能在两个文件中共用。   举例说明:项目文件夹project下有ma...

JavaScript声明全局变量三种方式的异同javascript

评论 2123084 #1楼 2011-03-19 18:50 yzx226 学习了 回复 引用 查看 #2楼 2011-03-19 22:54 gray zhang ...

const声明和全局变量

constconst跟let一样是es6中新的声明方法,很多的特性跟let是一样的。特性1.不可变更性 声明简单的类型时,该变量无法修改,这就意味着不能声明不赋值 声明的非简单的类型的数据时,可以在不...

声明和使用全局变量

全局变量历来就是很好的东西,能够在开发中带来很多方便,下面来介绍一下iPhone中软件开发时全局变量的使用方法: 一、新建Constants.h文件(文件名根据需要自己取),用于存放全局变量; 二...
  • a287971
  • a287971
  • 2012年06月17日 13:23
  • 503

Python写个Basic解析器(1)解析全局变量声明。

def _make_dim(self): while True: ''' 变量必须是一个标识符,但如使用了某个保留的关键字 将引起一个错误。 ...

局部变量与全局变量在声明时的注意事项

/* ============================================================================ Name : Test...
  • lfdfhl
  • lfdfhl
  • 2015年02月22日 17:51
  • 1328

php数组声明,遍历,数组全局变量

php教程数组声明,遍历,数组全局变量
  • lzb2512
  • lzb2512
  • 2013年06月05日 11:48
  • 2891

JS中VAR的用处(局部变量要用var来声明,全局变量不加var)

都不记得是什么时候看的JScript的语法教程了,里面说在声明变量时忽略var关键字是完全合法的。当时也因为觉得JavaScript是loosely-typed的语言,所以var可能真的就是个摆设。但...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:正确声明全局变量
举报原因:
原因补充:

(最多只允许输入30个字)