函數(shù)的存儲(chǔ)類(lèi)型指的是其他文件模塊可否訪(fǎng)問(wèn),其類(lèi)別可以是extern或static。
成都創(chuàng)新互聯(lián)專(zhuān)注于普安網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供普安營(yíng)銷(xiāo)型網(wǎng)站建設(shè),普安網(wǎng)站制作、普安網(wǎng)頁(yè)設(shè)計(jì)、普安網(wǎng)站官網(wǎng)定制、重慶小程序開(kāi)發(fā)服務(wù),打造普安網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供普安網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)落地服務(wù)。
static是指該函數(shù)只能被本源程序文件道中的模塊訪(fǎng)問(wèn)。extern是指可被本源程序文件外的模塊訪(fǎng)問(wèn)。
C語(yǔ)言中函數(shù)的存儲(chǔ)類(lèi)型隱含為版全局的,因此默認(rèn)為extern。
函數(shù)內(nèi)定義的變量,默權(quán)認(rèn)作用域在本函數(shù)內(nèi),即其類(lèi)型是auto。
擴(kuò)展資料:
在C語(yǔ)言中,提供了四種存儲(chǔ)類(lèi)型的存儲(chǔ)說(shuō)明符:auto、Register、Extern和static。這四個(gè)存儲(chǔ)類(lèi)別說(shuō)明符有兩個(gè)存儲(chǔ)術(shù)語(yǔ):自動(dòng)存儲(chǔ)術(shù)語(yǔ)和靜態(tài)存儲(chǔ)術(shù)語(yǔ)。
“自動(dòng)”和“寄存器”對(duì)應(yīng)的是自動(dòng)存儲(chǔ)周期。具有自動(dòng)存儲(chǔ)周期的變量在進(jìn)入聲明變量的塊時(shí)被創(chuàng)建,在塊活動(dòng)時(shí)存在,在塊退出時(shí)被撤銷(xiāo)。在函數(shù)中定義的變量成為局部變量。在一些C教科書(shū)中,局部變量被稱(chēng)為automatic,這與使用可選關(guān)鍵字auto定義局部變量的做法一致。
Extern通常用于變量聲明:在*中的另一個(gè)文件中引用全局變量。在*.h中應(yīng)該使用extern來(lái)聲明全局變量。
函數(shù)的存儲(chǔ)類(lèi)型指的是其他文件模塊可否訪(fǎng)問(wèn),其類(lèi)別可以是extern或static。
static是指該函數(shù)只能被本源程序文件道中的模塊訪(fǎng)問(wèn)。extern是指可被本源程序文件外的模塊訪(fǎng)問(wèn)。
C語(yǔ)言中函數(shù)的存儲(chǔ)類(lèi)型隱含為版全局的,因此默認(rèn)為extern。
函數(shù)內(nèi)定義的變量,默權(quán)認(rèn)作用域在本函數(shù)內(nèi),即其類(lèi)型是auto。
擴(kuò)展資料:
C語(yǔ)言中提供了存儲(chǔ)說(shuō)明符auto、register、extern、static說(shuō)明的四種存儲(chǔ)類(lèi)別。四種存儲(chǔ)類(lèi)別說(shuō)明符有兩種存儲(chǔ)期:自動(dòng)存儲(chǔ)期和靜態(tài)存儲(chǔ)期。
其中auto和register對(duì)應(yīng)自動(dòng)存儲(chǔ)期。具有自動(dòng)存儲(chǔ)期的變量在進(jìn)入聲明該變量的程序塊時(shí)被建立,它在該程序塊活動(dòng)時(shí)存在,退出該程序塊時(shí)撤銷(xiāo)。在函數(shù)內(nèi)部定義的變量成為局部變量。在某些C語(yǔ)言教材中,局部變量稱(chēng)為自動(dòng)變量,這就與使用可選關(guān)鍵字auto定義局部變量這一作法保持一致。
extern用在變量聲明中常常有這樣一個(gè)作用:要在*.c文件中引用另一個(gè)文件中的一個(gè)全局的變量,那就應(yīng)該放在*.h中用extern來(lái)聲明這個(gè)全局變量。
extern用于變量的用法:
1、extern int a;//聲明一個(gè)全局變量a
2、int a; //定義一個(gè)全局變量a
3、extern int a =0 ;//定義一個(gè)全局變量a 并給初值。一旦給予賦值,一定是定義,定義才會(huì)分配存儲(chǔ)空間。(注意:經(jīng)過(guò)測(cè)試在GCC中,這樣定義變量是不能通過(guò)編譯的,而在VS2013可以)
參考資料來(lái)源:百度百科——extern
參考資料來(lái)源:百度百科——auto
c語(yǔ)言中,函數(shù)的隱含存儲(chǔ)類(lèi)別是extern
形參的默認(rèn)存儲(chǔ)類(lèi)別是auto
auto
自動(dòng)存儲(chǔ)類(lèi)別
關(guān)于動(dòng)態(tài)存儲(chǔ)方式與靜態(tài)動(dòng)態(tài)存儲(chǔ)方式
從變量的作用域(即從空間)角度來(lái)分,可以分為全局變量和局部變量。
從另一個(gè)角度,從變量值存在的作時(shí)間(即生存期)角度來(lái)分,可以分為靜態(tài)存儲(chǔ)方式和動(dòng)態(tài)存儲(chǔ)方式。
靜態(tài)存儲(chǔ)方式:是指在程序運(yùn)行期間分配固定的存儲(chǔ)空間的方式。
動(dòng)態(tài)存儲(chǔ)方式:是在程序運(yùn)行期間根據(jù)需要進(jìn)行動(dòng)態(tài)的分配存儲(chǔ)空間的方式。
用戶(hù)存儲(chǔ)空間可以分為三個(gè)部分:
程序區(qū);
靜態(tài)存儲(chǔ)區(qū);
動(dòng)態(tài)存儲(chǔ)區(qū)。
全局變量全部存放在靜態(tài)存儲(chǔ)區(qū),在程序開(kāi)始執(zhí)行時(shí)給全局變量分配存儲(chǔ)區(qū),程序行完畢就釋放。在程序執(zhí)行過(guò)程中它們占據(jù)固定的存儲(chǔ)單元,而不動(dòng)態(tài)地進(jìn)行分配和釋放。
動(dòng)態(tài)存儲(chǔ)區(qū)存放以下數(shù)據(jù):
函數(shù)形式參數(shù);
自動(dòng)變量(未加static聲明的局部變量);
函數(shù)調(diào)用實(shí)的現(xiàn)場(chǎng)保護(hù)和返回地址。
對(duì)以上這些數(shù)據(jù),在函數(shù)開(kāi)始調(diào)用時(shí)分配動(dòng)態(tài)存儲(chǔ)空間,函數(shù)結(jié)束時(shí)釋放這些空間。
在C語(yǔ)言中,每個(gè)變量和函數(shù)有兩個(gè)屬性:數(shù)據(jù)類(lèi)型和數(shù)據(jù)的存儲(chǔ)類(lèi)別。
auto變量
函數(shù)中的局部變量,如不專(zhuān)門(mén)聲明為static存儲(chǔ)類(lèi)別,都是動(dòng)態(tài)地分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中。
函數(shù)中的形參和在函數(shù)中定義的變量(包括在復(fù)合語(yǔ)句中定義的變量),都屬此類(lèi),在調(diào)用該函數(shù)時(shí)系統(tǒng)會(huì)給它們分配存儲(chǔ)空間,在函數(shù)調(diào)用結(jié)束時(shí)就自動(dòng)釋放這些存儲(chǔ)空間。這類(lèi)局部變量稱(chēng)為自動(dòng)變量。自動(dòng)變量用關(guān)鍵字auto作存儲(chǔ)類(lèi)別的聲明。例如:int f(int a){ ?/* 定義f函數(shù),a為參數(shù) */ ? ?auto int b,c=3; ?/*定義b,c自動(dòng)變量*/ ? ?/* …… */}
a是形參,b,c是自動(dòng)變量,對(duì)c賦初值3。執(zhí)行完f函數(shù)后,自動(dòng)釋放a,b,c所占的存儲(chǔ)單元。
關(guān)鍵字auto可以省略,auto不寫(xiě)則隱含定為“自動(dòng)存儲(chǔ)類(lèi)別”,屬于動(dòng)態(tài)存儲(chǔ)方式。
用static聲明局部變量
有時(shí)希望函數(shù)中的局部變量的值在函數(shù)調(diào)用結(jié)束后不消失而保留原值,這時(shí)就應(yīng)該指定局部變量為“靜態(tài)局部變量”,用關(guān)鍵字static進(jìn)行聲明。
【例8-15】考察靜態(tài)局部變量的值。
#include?stdio.hint?f(int?a){????auto?int?b=0;????static?int?c=3;????b=b+1;????c=c+1;????return?(a+b+c);}int?main(void){????int?a=2,i;????for(i=0;i3;i++)????????printf("%d\n",f(a));????return?0;}
對(duì)靜態(tài)局部變量的說(shuō)明:
靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類(lèi)別,在靜態(tài)存儲(chǔ)區(qū)內(nèi)分配存儲(chǔ)單元。在程序整個(gè)運(yùn)行期間都不釋放。而自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類(lèi)別,占動(dòng)態(tài)存儲(chǔ)空間,函數(shù)調(diào)用結(jié)束后即釋放。
靜態(tài)局部變量在編譯時(shí)賦初值,即只賦初值一次;而對(duì)自動(dòng)變量賦初值是在函數(shù)調(diào)用時(shí)進(jìn)行,每調(diào)用一次函數(shù)重新給一次初值,相當(dāng)于執(zhí)行一次賦值語(yǔ)句。
如果在定義局部變量時(shí)不賦初值的話(huà),則對(duì)靜態(tài)局部變量來(lái)說(shuō),編譯時(shí)自動(dòng)賦初值0(對(duì)數(shù)值型變量)或空字符(對(duì)字符變量)。而對(duì)自動(dòng)變量來(lái)說(shuō),如果不賦初值則它的值是一個(gè)不確定的值。
【例8-16】打印1到5的階乘值。
#include?stdio.hint?fac(int?n){????static?int?f=1;????f=f*n;????return?f;}int?main(void){????int?i;????for(i=1;i=5;i++)????????printf("%d!=%d\n",i,fac(i));????return?0;}
register變量
為了提高效率,C語(yǔ)言允許將局部變量得值放在CPU中的寄存器中,這種變量叫“寄存器變量”,用關(guān)鍵字register作聲明。
【例8-17】使用寄存器變量。
#include?stdio.hint?fac(int?n){????register?int?i,f=1;????for(i=1;i=n;i++)????????f=f*i;????return?f;}int?main(void){????int?i;????for(i=0;i=5;i++)????????printf("%d!=%d\n",i,fac(i));????return?0;}
對(duì)寄存器變量的幾點(diǎn)說(shuō)明:
只有局部自動(dòng)變量和形式參數(shù)可以作為寄存器變量;
一個(gè)計(jì)算機(jī)系統(tǒng)中的寄存器數(shù)目有限,不能定義任意多個(gè)寄存器變量;
局部靜態(tài)變量不能定義為寄存器變量。
用extern聲明外部變量
外部變量(即全局變量)是在函數(shù)的外部定義的,它的作用域?yàn)閺淖兞慷x處開(kāi)始,到本程序文件的末尾。如果外部變量不在文件的開(kāi)頭定義,其有效的作用范圍只限于定義處到文件終了。如果在定義點(diǎn)之前的函數(shù)想引用該外部變量,則應(yīng)該在引用之前用關(guān)鍵字extern對(duì)該變量作“外部變量聲明”。表示該變量是一個(gè)已經(jīng)定義的外部變量。有了此聲明,就可以從“聲明”處起,合法地使用該外部變量。
C。
C語(yǔ)言規(guī)定,只要在定義函數(shù)時(shí)不進(jìn)行存儲(chǔ)類(lèi)型的顯式說(shuō)明,函數(shù)的存儲(chǔ)類(lèi)型就隱含為外部類(lèi)型,即extern型,外部類(lèi)型允許其他文件中的函數(shù)調(diào)用。
實(shí)際上函數(shù)的聲明和定義都不需要添加extern關(guān)鍵字,在實(shí)際使用的時(shí)候也最好不要添加關(guān)鍵字。
如果一個(gè)函數(shù)是不會(huì)被其它文件調(diào)用的,那么這個(gè)函數(shù)應(yīng)該被聲明成static的。
如:
extern int func(void){
return 0;
}
跟
int func(void){
return 0;
}
是等價(jià)的,另外
extern int func(void);
跟
int func(void);是等價(jià)的。
擴(kuò)展資料:
函數(shù)調(diào)用的一般形式為:
函數(shù)名(實(shí)參表列);
如果是調(diào)用無(wú)參函數(shù),則"實(shí)參表列"可以沒(méi)有,但括弧不能省略。如果實(shí)參表列包含多個(gè)實(shí)參,則個(gè)參數(shù)間用逗號(hào)隔開(kāi)。實(shí)參與形參的個(gè)數(shù)應(yīng)相等,類(lèi)型應(yīng)一致。
實(shí)參與形參按順序?qū)?yīng),一一傳遞數(shù)據(jù)。但應(yīng)說(shuō)明,如果實(shí)參表列包括多個(gè)實(shí)參,對(duì)實(shí)參求值的順序并不是確定的,有的系統(tǒng)按自左至右順序求實(shí)參的值,有的系統(tǒng)則按自右至左順序
參考資料:
百度百科-c函數(shù)
當(dāng)前文章:c語(yǔ)言函數(shù)隱含存儲(chǔ)類(lèi)別,c語(yǔ)言的四種存儲(chǔ)類(lèi)別
當(dāng)前路徑:http://jinyejixie.com/article30/dssicpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營(yíng)銷(xiāo)型網(wǎng)站建設(shè)、App設(shè)計(jì)、定制網(wǎng)站、服務(wù)器托管、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)