关闭

正确声明全局变量

613人阅读 评论(1) 收藏 举报
通常我们都不太赞成使用全局变量,但有时确实也避免不了。每当使用全局变量或对象时,决不要在头文件中实例化,因为头文件一般都被包含(#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的引用。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:146505次
    • 积分:2168
    • 等级:
    • 排名:第18113名
    • 原创:61篇
    • 转载:44篇
    • 译文:0篇
    • 评论:19条
    最新评论