C語言static的作用

在C語言中,static的字面意思很容易把我們導入歧途羹应,其實它的作用有三條揽碘。

(1)第一個作用:隱藏。

當我們同時編譯多個文件時园匹,所有未加static前綴的全局變量和函數(shù)都具有全局可見性雳刺。為理解這句話,我舉例來說明裸违。我們要同時編譯兩個源文件掖桦,一個是a.c,另一個是main.c供汛。

下面是a.c的內(nèi)容

#include增加這條語句

char a = ‘A‘; // global variable

void msg()

{

printf("Hello\n");

}

你可能會問:為什么在a.c中定義的全局變量a和函數(shù)msg能在main.c中使用枪汪?前面說過,所有未加static前綴的全局變量和函數(shù)都具有全局可見性怔昨,其它的源文件也能訪問雀久。此例中,a是全局變量趁舀,msg是函數(shù)赖捌,并且都沒有加static前綴,因此對于另外的源文件main.c是可見的赫编。

如果加了static巡蘸,就會對其它源文件隱藏奋隶。例如在a和msg的定義前加上static擂送,main.c就看不到它們了。利用這一特性可以在不同的文件中定義同名函數(shù)和同名變量唯欣,而不必擔心命名沖突嘹吨。Static可以用作函數(shù)和變量的前綴,對于函數(shù)來講境氢,static的作用僅限于隱藏蟀拷,而對于變量,static還有下面兩個作用萍聊。

(2)static的第二個作用是保持變量內(nèi)容的持久问芬。存儲在靜態(tài)數(shù)據(jù)區(qū)的變量會在程序剛開始運行時就完成初始化,也是唯一的一次初始化寿桨。共有兩種變量存儲在靜態(tài)存儲區(qū):全局變量和static變量此衅,只不過和全局變量比起來强戴,static可以控制變量的可見范圍,說到底static還是用來隱藏的挡鞍。

(3)static的第三個作用是默認初始化為0骑歹。其實全局變量也具備這一屬性,因為全局變量也存儲在靜態(tài)數(shù)據(jù)區(qū)墨微。在靜態(tài)數(shù)據(jù)區(qū)道媚,內(nèi)存中所有的字節(jié)默認值都是0x00,某些時候這一特點可以減少程序員的工作量翘县。

最后對static的三條作用做一句話總結(jié)最域。首先static的最主要功能是隱藏,其次因為static變量存放在靜態(tài)存儲區(qū)锈麸,所以它具備持久性和默認值0羡宙。

下面是main.c的內(nèi)容

除了頭文件,需要聲明函數(shù):void msg();

int main(void)

{

extern char a; // extern variable must be declared before use

printf("%c ", a);

(void)msg();

return 0;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掐隐,一起剝皮案震驚了整個濱河市狗热,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌虑省,老刑警劉巖匿刮,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異探颈,居然都是意外死亡熟丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門伪节,熙熙樓的掌柜王于貴愁眉苦臉地迎上來光羞,“玉大人,你說我怎么就攤上這事怀大∩炊遥” “怎么了?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵化借,是天一觀的道長潜慎。 經(jīng)常有香客問我,道長蓖康,這世上最難降的妖魔是什么铐炫? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蒜焊,結(jié)果婚禮上倒信,老公的妹妹穿的比我還像新娘。我一直安慰自己泳梆,他們只是感情好鳖悠,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布唆迁。 她就那樣靜靜地躺著,像睡著了一般竞穷。 火紅的嫁衣襯著肌膚如雪唐责。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天瘾带,我揣著相機與錄音鼠哥,去河邊找鬼。 笑死看政,一個胖子當著我的面吹牛朴恳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播允蚣,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼于颖,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嚷兔?” 一聲冷哼從身側(cè)響起森渐,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎冒晰,沒想到半個月后同衣,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡壶运,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年耐齐,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蒋情。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡埠况,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棵癣,到底是詐尸還是另有隱情辕翰,我是刑警寧澤,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布浙巫,位于F島的核電站金蜀,受9級特大地震影響刷后,放射性物質(zhì)發(fā)生泄漏的畴。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一尝胆、第九天 我趴在偏房一處隱蔽的房頂上張望丧裁。 院中可真熱鬧,春花似錦含衔、人聲如沸煎娇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽缓呛。三九已至催享,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哟绊,已是汗流浹背因妙。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留票髓,地道東北人攀涵。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像洽沟,于是被迫代替她去往敵國和親以故。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容