C語言static和extern使用方法的介紹
推薦 + 挑錯(cuò) + 收藏(0) + 用戶評論(0)
一.變量
對于變量來說,
?。?)extern int a;//聲明一個(gè)全局變量a,
?。?)int a; //定義一個(gè)全局變量a,
?。?)extern int a =0 ;//定義一個(gè)全局變量a 并給初值,
?。?)int a =0;//定義一個(gè)全局變量a,并給初值。
上述4種情形,(3)與(4)等同。
定義只能在一處出現(xiàn),但聲明可以在多處出現(xiàn)。也就是說,不管是int a;還是extern int a=0;還是int a=0;都只能出現(xiàn)一次,而extern int a可以出現(xiàn)很多次。
當(dāng)你要引用一個(gè)全局變量的時(shí)候,你就要聲明,extern int a;這時(shí)候extern不能省略,因?yàn)槭÷粤耍妥兂蒳nt a;這是一個(gè)定義,不是聲明。
二.函數(shù)
對于函數(shù)來說,定義的時(shí)候用extern,說明這個(gè)函數(shù)是可以被外部引用的,聲明的時(shí)候用extern說明這是一個(gè)聲明。但由于函數(shù)的定義和聲明是有區(qū)別的,定義函數(shù)要有函數(shù)體,聲明函數(shù)沒有函數(shù)體,所以函數(shù)定義和聲明時(shí)都可以將extern省略掉,反正其他文件也是知道這個(gè)函數(shù)是在其他地方定義的,所以不加extern也行。
總結(jié):
1)對變量而言,如果你想在本源文件中使用另一個(gè)源文件的變量,就需要在使用前用extern聲明該變量,或者在頭文件中用extern聲明該變量;
2)對函數(shù)而言,如果你想在本源文件中使用另一個(gè)源文件的函數(shù),就需要在使用前用聲明該變量,聲明函數(shù)加不加extern都沒關(guān)系,所以在頭文件中函數(shù)可以不用加extern。
第二章 static使用方法
一. 全局靜態(tài)變量
在全局變量之前加上關(guān)鍵字static,全局變量就被定義成為一個(gè)全局靜態(tài)變量。
1)內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū)在整個(gè)程序運(yùn)行期間都存在);
2)初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對象的值是任意的,除非他被顯示初始化);
3)作用域:全局靜態(tài)變量在聲明他的文件之外是不可見的,準(zhǔn)確地講,從定義之處開始到文件結(jié)尾。
定義全局靜態(tài)變量的好處:
《1》不會(huì)被其他文件所訪問、修改;
《2》其他文件中可以使用相同名字的變量,不會(huì)發(fā)生沖突。
二.局部靜態(tài)變量
在局部變量之前加上關(guān)鍵字static,局部變量就被定義成為一個(gè)局部靜態(tài)變量。
1)內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)
2)初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對象的值是任意的,除非他被顯示初始化)
3)作用域:作用域仍為局部作用域,當(dāng)定義它的函數(shù)或者語句塊結(jié)束的時(shí)候,作用域隨
之結(jié)束。
注:當(dāng)static用來修飾局部變量的時(shí)候,它就改變了局部變量的存儲(chǔ)位置,從原來的棧中存放改為靜態(tài)存儲(chǔ)區(qū)。但是局部靜態(tài)變量在離開作用域之后,并沒有被銷毀,而是仍然駐留在內(nèi)存當(dāng)中,直到程序結(jié)束,只不過我們不能再對他進(jìn)行訪問。當(dāng)static用來修飾全局變量的時(shí)候,它就改變了全局變量的作用域(在聲明他的文件之外是不可見的),但是沒有改變它的存放位置,還是在靜態(tài)存儲(chǔ)區(qū)中。
三. 靜態(tài)函數(shù)
在函數(shù)的返回類型前加上關(guān)鍵字static,函數(shù)就被定義成為靜態(tài)函數(shù)。函數(shù)的定義和聲明默認(rèn)情況下是extern的,但靜態(tài)函數(shù)只是在聲明他的文件當(dāng)中可見,不能被其他文件所用。
定義靜態(tài)函數(shù)的好處:
《1》 其他文件中可以定義相同名字的函數(shù),不會(huì)發(fā)生沖突
《2》 靜態(tài)函數(shù)不能被其他文件所用。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
下載地址
C語言static和extern使用方法的介紹下載
相關(guān)電子資料下載
- Java中對static關(guān)鍵詞的介紹 105
- static定義內(nèi)部類 91
- 靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造函數(shù)及普通代碼塊的執(zhí)行順序 83
- 深入理解C++ “static”關(guān)鍵字 287
- 【知識(shí)科普】C語言的static究竟限制了誰 158
- 貿(mào)澤開售面向物聯(lián)網(wǎng)和網(wǎng)關(guān)應(yīng)用的TE Connectivity/Laird External Antennas DBA6171Cx 5G/4G室 158
- C語言的static究竟限制了誰?介紹一種繞開static限制的方法 404
- LL庫中常見關(guān)鍵字__STATIC_INLINE 370
- C語言面試最常問的關(guān)鍵字 111
- 【筆記】static 在C語言中的用法 221