全局變量一般這樣定義:
1。在一類(lèi)的.cpp中定義 int myInt;
然后再在要用到的地方的.cpp里extern int myInt;這樣就可以用了。
2。在stdafx.cpp中加入:
int myInt;
然后在stdafx.h中加入:
extern int myInt
這樣定義以后無(wú)論在什么文件中都是可見(jiàn)的.
3。比較規(guī)范的是,先定義一個(gè)Glbs.h,把所有的全局變量原始定義放進(jìn)去。然后定義一個(gè)Externs.h,把你先前定義在Glbs.h中的變量都加上extern。注意:如果你在Glbs.h中設(shè)置了初值,那么在Externs.h中就不要加值了。然后調(diào)用時(shí),第一次調(diào)用的#i nclude <Glbs.h>,以后調(diào)用的#i nclude <Externs.h>
另:
問(wèn):如何在VC++中使用全局變量,以使文檔中的所有類(lèi)都能訪(fǎng)問(wèn)。
答:把該變量放到該應(yīng)用程序類(lèi)的頭文件中的attribute處。然后,在程序的任何地方,你都可以用下面的方法來(lái)訪(fǎng)問(wèn)該變量:
CMyApp *app=(CMyApp*)AfxGet-App();
app->MyGlobalVariable=…
用這個(gè)方法,不但可以定義全局變量,也可以定義全局對(duì)象。
例如:
MyClass MyObject;
CMyApp*app=(CMyApp*)AfxGet-App();
app->MyObject.MyFunction();
VC中使用全局變量的2種辦法及防錯(cuò)措施
1. 對(duì)于全局變量存在和函數(shù)一樣的問(wèn)題,為了在其他CPP文件中能夠訪(fǎng)問(wèn)這些變量,必須在主文件的H文件中加上extern聲明,格式如下:
extern varibletype var; (聲明)
在主文件的CPP文件中定義
varibletype var; (定義)
例子:
AppWizard建立一個(gè)Test工程
那么在Test.h中聲明extern CString cs;
在Test.app定義CString cs;
如果要定義整個(gè)工程的全局變量,在任何一個(gè)CPP文件中進(jìn)行定義,然后在需要引用這個(gè)變量的文件中進(jìn)行聲明。如全局變量很多可以選擇使用定義全局變量的。h文件,在需要的地方直接include頭文件即可,不需要寫(xiě)那么多extern了。
2.應(yīng)用程序類(lèi)的主頭文件處定義變量varibletype var,然后,在程序的任何地方,都可以用下面的方法來(lái)訪(fǎng)問(wèn)該變量:
CClassApp *app=(CClassApp*)AfxGetApp();
app->var=
類(lèi)似的,以上方法也可以定義全局對(duì)象
例子:
AppWizard建立一個(gè)Test工程
那么在Test.h中聲明 CString cs;
使用的時(shí)候CTestApp *app=(CTestApp*)AfxGetApp();
app->cs="Global"
防錯(cuò)措施:
若定義的函數(shù)和全局變量在多個(gè)文件包含且造成嵌套或多次調(diào)用的話(huà),這樣將導(dǎo)致這個(gè)頭文件每被包含依次,函數(shù)或變量就被重新定義一次,在鏈接編譯時(shí)會(huì)導(dǎo)致重定義錯(cuò)誤。為此需要使用一種被稱(chēng)為Guard macro的技術(shù)來(lái)保證不出錯(cuò)。在一個(gè)頭文件開(kāi)頭加上
#ifndef _MACRO_1_
#define _MACRO_1_
在文件末尾增加
#endif