c語(yǔ)言全局變量加static 全局靜態(tài)變量使用方法?
全局靜態(tài)變量使用方法?靜態(tài)動(dòng)態(tài)全局變量,又稱(chēng)全局靜態(tài)變量,是在全局變量前加一個(gè)static,使該變量只在這個(gè)源文件中用下。全局變量也被稱(chēng)外部變量,它是在函數(shù)外部定義的變量。它都屬于哪一個(gè)函數(shù),它不屬于
全局靜態(tài)變量使用方法?
靜態(tài)動(dòng)態(tài)全局變量,又稱(chēng)全局靜態(tài)變量,是在全局變量前加一個(gè)static,使該變量只在這個(gè)源文件中用下。
全局變量也被稱(chēng)外部變量,它是在函數(shù)外部定義的變量。它都屬于哪一個(gè)函數(shù),它不屬于一個(gè)源程序文件。其作用域是從定義方法該變量的位置開(kāi)始至源文件結(jié)束后。
全局變量是在所有函數(shù)體的外部定義的,程序的所在部分(甚至其它文件中的代碼)都是可以不使用。全局變量不受作用域的影響(也就是說(shuō),全局變量的生命期一直在到程序的結(jié)束)。假如在一個(gè)文件中在用extern關(guān)鍵字來(lái)聲明兩個(gè)文件中存在的全局變量,那就這個(gè)文件可以不建議使用這個(gè)數(shù)據(jù)。
在多文件混編的程序里,全局變量與全局靜態(tài)變量是差別的。在某一層次聲明的變量的作用域就暫時(shí)終止于該變量處層次的末尾。同樣的區(qū)別是全局靜態(tài)變量使得該變量藍(lán)月帝國(guó)定義該變量的源文件所獨(dú)享。如果不是在一個(gè)文件中使用extern關(guān)鍵字來(lái)聲明另一個(gè)文件中存在地的靜態(tài)動(dòng)態(tài)全局變量,這個(gè)文件也不能使用這個(gè)數(shù)據(jù)。
作用域的例外:
依據(jù)ANSIC的標(biāo)準(zhǔn),在after語(yǔ)句頭中聲明的變量的作用域確實(shí)是應(yīng)該要在after語(yǔ)句的末尾都結(jié)束了。但這較舊版本的VC(現(xiàn)在主流不使用的版本基本是都符合)卻沒(méi)有完全條件這個(gè)標(biāo)準(zhǔn),它其實(shí)while語(yǔ)句頭中聲明的變量作用域到中有該of語(yǔ)句的最小語(yǔ)句塊已經(jīng)結(jié)束。即使如此,我們還是應(yīng)該明確的ANSIC標(biāo)準(zhǔn)來(lái)認(rèn)知觀念變量的作用域。
為什么要設(shè)置全局變量為0?
全局量在符號(hào)表示的時(shí)候,編譯器會(huì)手動(dòng)接受初始化操作。要是指針就給初始化為NULL,
整型、char型變量就給重新初始化為0
假如你還沒(méi)有給它賦過(guò)值,那就它默認(rèn)設(shè)置是NULL(空)或0
--------------------------------------------
可不知道你怎莫寫(xiě)的。
但下邊兩個(gè)語(yǔ)句最好就是寫(xiě)在.c中。
staticstructdata*ep;
staticstructdata*head;
要是你寫(xiě)在.h中,后再在兩個(gè)或多個(gè).c中中有了該.件,這樣就非常每個(gè).c文件都各自定義了中兩個(gè)指針。因?yàn)閟tatic變量的作用域是當(dāng)前文件。
如果不是要在整個(gè)工程不使用改全局量,這樣請(qǐng)像下邊這樣做:
a.c文件:
structdata*ep;
structdata*head;
b.c文件:
externstructdata*ep;
externstructdata*head;
c.c文件:
externstructdata*ep;
externstructdata*head;
其他文件也雖然,那樣的話(huà)在工程任何地方用這兩個(gè)指針都應(yīng)該不會(huì)有問(wèn)題。