標(biāo)題: 關(guān)鍵字static的作用 [打印本頁]
作者: 51hei單片 時(shí)間: 2016-3-13 17:15
標(biāo)題: 關(guān)鍵字static的作用
在C語言中,關(guān)鍵字static有三個(gè)明顯的作用:
1)在函數(shù)體內(nèi),一個(gè)被聲明為靜態(tài)的變量在這一函數(shù)被調(diào)用過程中維持其值不變(該變量存放在靜態(tài)變量區(qū))。
2) 在模塊內(nèi)(但在函數(shù)體外),一個(gè)被聲明為靜態(tài)的變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問。它是一個(gè)本地的全局變量。
3) 在模塊內(nèi),一個(gè)被聲明為靜態(tài)的函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用。那就是,這個(gè)函數(shù)被限制在聲明它的模塊的本地范圍內(nèi)使用。
大多數(shù)應(yīng)試者能正確回答第一部分,一部分能正確回答第二部分,但是很少的人能懂得第三部分。這是一個(gè)應(yīng)試者的嚴(yán)重的缺點(diǎn),因?yàn)樗@然不懂得本地化數(shù)據(jù)和代碼范圍的好處和重要性。
考點(diǎn):在嵌入式系統(tǒng)中,要時(shí)刻懂得移植的重要性,程序可能是很多程序員共同協(xié)作同時(shí)完成,在定義變量及函數(shù)的過程,可能會重名,這給系統(tǒng)的集成帶來麻煩,因此保證不沖突的辦法是顯示的表示此變量或者函數(shù)是本地的,static即可。
在Linux的模塊編程中,這一條很明顯,所有的函數(shù)和全局變量都要用static關(guān)鍵字聲明,將其作用域限制在本模塊內(nèi)部,與其他模塊共享的函數(shù)或者變量要EXPORT到內(nèi)核中。
static關(guān)鍵字至少有下列n個(gè)作用:
(1)設(shè)置變量的存儲域,函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值;
(2)限制變量的作用域,在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問,但不能被模塊外其它函數(shù)訪問;
(3)限制函數(shù)的作用域,在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);
(4)在類中的static成員變量意味著它為該類的所有實(shí)例所共享,也就是說當(dāng)某個(gè)類的實(shí)例修改了該靜態(tài)成員變量,其修改值為該類的其它所有實(shí)例所見;
(5)在類中的static成員函數(shù)屬于整個(gè)類所擁有,這個(gè)函數(shù)不接收this指針,因而只能訪問類的static成員變量。
| 歡迎光臨 (http://www.raoushi.com/bbs/) |
Powered by Discuz! X3.1 |