您的位置:首页 > 编程语言 > C语言/C++

c++中全局变量的声明与使用

2009-07-07 10:44 711 查看
1.extern的作用

extern有两个作用,第一个,当它与"C"一起连用时,如: extern "C" void fun(int a, int b); 则告诉编译器在编译fun这个函数名时按着C的规则去翻译相应的函数名而不是C++的, C++的规则在翻译这个函数名时会把fun这个名字变得面目全非,可能是fun@aBc_int_int#%$也可能是别的,这要看编译器的"脾气"了(不同的编译器采用的方法不一样),为什么这么做呢,因为C++支持函数的重载啊,在这里不去过多的论述这个问题,如果你有兴趣可以去网上搜索,相信你可以得到满意的解释!
当extern不与"C"在一起修饰变量或函数时,如在头文件中: extern int g_Int; 它的作用就是声明函数或全局变量的作用范围的关键字,其声明的函数和变量可以在本模块活其他模块中使用,记住它是一个声明不是定义!也就是说B模块(编译单元)要是引用模块(编译单元)A中定义的全局变量或函数时,它只要包含A模块的头文件即可, 在编译阶段,模块B虽然找不到该函数或变量,但它不会报错,它会在连接时从模块A生成的目标代码中找到此函数。

转自:http://blog.csdn.net/sanlei1616/archive/2009/02/13/3882846.aspx

2.全局变量声明和使用的方法:

1)使用关键字extern

在A.h文件中声明有如下声明:

#ifndef AH;

#define AH;

extern CString strTest; //声明一个全局的变量 strTest

在A.cpp中定义该变量:

CString strTest = "Hello word!";//CString 类型说明不可少

在B.cpp中需要使用该全局变量,则只需在B.cpp中包含A.h文件。

2)在App应用程序中声明(针对MFC程序):

声明CMyApp类的一个公有成员变量CString strTest.在需要使用的地方先包含声明所在的头文件。使用:

CMyApp *pApp = (CMyApp*)AfxGetApp();获得应用程序的实例,然后通过pApp->strTest访问该变量。这种方法,strTest并不是全局变量,而是通过使用了MFC的AfxGetApp()函数可以在任何地方调用之。

3)用Static修饰的全局变量

这里使用Static修饰的变量有别于类中的静态成员变量。Static和extern不能同时修饰一个全局变量,使用Static来定义全局变量时,变量的声明和定义是同时进行的。

在A.h文件中声明有如下声明:

#ifndef AH;

#define AH;

Static CString strTest = “hello world!”; //声明一个全局的变量 strTest

在B.cpp中需要使用该全局变量,则只需在B.cpp中包含A.h文件。需要指出的是,在A.h中定义了全局变量,B.cpp中包含A.h时也许会以为出现重复定义的错误,事实上编译时并不会出现这样的问题,这是因为虽然前后内容一样,但存储的物理地址并不一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: