十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
c語言中,函數(shù)的隱含存儲類別是extern
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了萊山免費建站歡迎大家使用!
形參的默認(rèn)存儲類別是auto
函數(shù)的存儲類型指的是其他文件模塊可否訪問,其類別可以是extern或static。
static是指該函數(shù)只能被本源程序文件道中的模塊訪問。extern是指可被本源程序文件外的模塊訪問。
C語言中函數(shù)的存儲類型隱含為版全局的,因此默認(rèn)為extern。
函數(shù)內(nèi)定義的變量,默權(quán)認(rèn)作用域在本函數(shù)內(nèi),即其類型是auto。
擴展資料:
在C語言中,提供了四種存儲類型的存儲說明符:auto、Register、Extern和static。這四個存儲類別說明符有兩個存儲術(shù)語:自動存儲術(shù)語和靜態(tài)存儲術(shù)語。
“自動”和“寄存器”對應(yīng)的是自動存儲周期。具有自動存儲周期的變量在進入聲明變量的塊時被創(chuàng)建,在塊活動時存在,在塊退出時被撤銷。在函數(shù)中定義的變量成為局部變量。在一些C教科書中,局部變量被稱為automatic,這與使用可選關(guān)鍵字auto定義局部變量的做法一致。
Extern通常用于變量聲明:在*中的另一個文件中引用全局變量。在*.h中應(yīng)該使用extern來聲明全局變量。
在函數(shù)體內(nèi)聲明的變量在默認(rèn)情況下都是auto存儲類型
在代碼塊之間傳遞信息的一種方法就是使用外部變量。當(dāng)一個變量在函數(shù)的外部被聲明時,安的存儲空間是永久分配的,安人存儲類型是extren.外部變量的聲明看上去和函數(shù)或代碼塊內(nèi)部所聲明的變量一樣。外部變量對于它之后的所有函數(shù)都有效。在代碼塊或函數(shù)后,外部變量仍然存在。
static的基本用途是允許一個局部變量在重新進入代碼塊時能夠保持原來的值。這和自動變量形成了鮮明的對比,自動變量在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。
register存儲類型告訴編譯器相關(guān)的變量應(yīng)該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執(zhí)行速度,但是,register聲明只是向編譯器所提出的“建議”,并非強制要求。
在C語言中,對變量的存儲類型說明有以下四種:
1、auto? 自動變量
2、register? 寄存器變量
3、extern? 外部變量
4、static? 靜態(tài)變量
所謂存儲類型是指變量占用內(nèi)存空間的方式,也稱為存儲方式。
變量的存儲方式可分為“靜態(tài)存儲”和“動態(tài)存儲”兩種。
1、靜態(tài)存儲變量通常是在變量定義時就在存儲單元并一直保持不變,直至整個程序結(jié)束。
2、動態(tài)存儲變量是在程序執(zhí)行過程中,使用它時才分配存儲單元,使用完畢立即釋放。典型的例子是函數(shù)的形式參數(shù),在函數(shù)定義時并不給形參分配存儲單元,只是在函數(shù)被調(diào)用時,才予以分配,調(diào)用函數(shù)完畢立即釋放。
如果一個函數(shù)被多次調(diào)用,則反復(fù)地分配、釋放形參變量的存儲單元。從以上分析可知,靜態(tài)存儲變量是一直存在的,而動態(tài)存儲變量則時而存在時而消失。
擴展資料:
變量根據(jù)定義的位置的不同的生命周期,具有不同的作用域,作用域可分為6種:全局作用域,局部作用域,語句作用域,類作用域,命名空間作用域和文件作用域。
一、從作用域看:
1、全局變量具有全局作用域。全局變量只需在一個源文件中定義,就可以作用于所有的源文件。當(dāng)然,其他不包含全局變量的定義的源文件需要用extern關(guān)鍵字再次聲明這個全局變量。
2、靜態(tài)局部變量具有局部作用域,它只被初始化一次,自從第一次被初始化直到程序運行結(jié)束一直存在,它和全局變量的區(qū)別在于全局變量對所有函數(shù)都是可見的,而靜態(tài)局部變量只對定義自己的函數(shù)體始終可見。
3、局部變量也只有局部作用域,它是自動對象(auto),它在程序運行期間不是一直存在,而是只在函數(shù)執(zhí)行期間存在,函數(shù)的一次調(diào)用執(zhí)行結(jié)束后,變量被撤銷,其所占用的內(nèi)存也被收回。
4、靜態(tài)全局變量也具有全局作用域,它與全局變量的區(qū)別在于如果程序包含多個文件的話,它作用于定義它文件里,不能作用到其他文件里,即被static關(guān)鍵字修飾過的變量具有文件作用域。這樣即使兩個不同的源文件都定義了相同名字的靜態(tài)全局變量,它們也是不同的變量。
二、從分配空間看:
全局變量,靜態(tài)局部變量,靜態(tài)全局變量都在靜態(tài)存儲區(qū)分配空間,而局部變量在棧里分配空間。
全局變量本身就是靜態(tài)存儲方式,靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲方式。這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序,當(dāng)一個源程序由多個源文件組成時,非靜態(tài)的全局變量在各個源文件中都是有效的。
而靜態(tài)全局變量則限制了其作用域,即只在定義該變量的源文件內(nèi)有效,在同一個源程序的其他源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其他源文件中引起錯誤。
1、靜態(tài)變量會放在程序的靜態(tài)數(shù)據(jù)存儲區(qū)(全局可見)中,這樣可以在下一次調(diào)用的時候還可以保持原來的賦值。這一點是它與堆棧變量和堆變量的區(qū)別。
2、變量用static告知編譯器,自己僅僅在變量的作用范圍內(nèi)可見。這一點是它與全局變量的區(qū)別。
參考資料來源:百度百科-變量-存儲類型
c語言中的存儲類型有auto, extern, register, static 這四種,存儲類型說明了該變量要在進程的哪一個段中分配內(nèi)存空間,可以為變量分配內(nèi)存存儲空間的有數(shù)據(jù)區(qū)、BBS區(qū)、棧區(qū)、堆區(qū)。
1. auto存儲類型
auto只能用來標(biāo)識局部變量的存儲類型,對于局部變量,auto是默認(rèn)的存儲類型,不需要顯示的指定。因此,auto標(biāo)識的變量存儲在棧區(qū)中。
2. extern存儲類型
extern用來聲明在當(dāng)前文件中引用在當(dāng)前項目中的其它文件中定義的全局變量。如果全局變量未被初始化,那么將被存在BBS區(qū)中,且在編譯時,自動將其值賦值為0,如果已經(jīng)被初始化,那么就被存在數(shù)據(jù)區(qū)中。全局變量,不管是否被初始化,其生命周期都是整個程序運行過程中,為了節(jié)省內(nèi)存空間,在當(dāng)前文件中使用extern來聲明其它文件中定義的全局變量時,就不會再為其分配內(nèi)存空間。
3. register存儲類型
聲明為register的變量在由內(nèi)存調(diào)入到CPU寄存器后,則常駐在CPU的寄存器中,因此訪問register變量將在很大程度上提高效率,因為省去了變量由內(nèi)存調(diào)入到寄存器過程中的好幾個指令周期。
4. static存儲類型
被聲明為靜態(tài)類型的變量,無論是全局的還是局部的,都存儲在數(shù)據(jù)區(qū)中,其生命周期為整個程序,如果是靜態(tài)局部變量,其作用域為一對{}內(nèi),如果是靜態(tài)全局變量,其作用域為當(dāng)前文件。靜態(tài)變量如果沒有被初始化,則自動初始化為0。靜態(tài)變量只能夠初始化一次。
函數(shù)的存儲類型指的是其他文件模塊可否訪問,其類別可以是extern或static。
static是指該函數(shù)只能被本源程序文件道中的模塊訪問。extern是指可被本源程序文件外的模塊訪問。
C語言中函數(shù)的存儲類型隱含為版全局的,因此默認(rèn)為extern。
函數(shù)內(nèi)定義的變量,默權(quán)認(rèn)作用域在本函數(shù)內(nèi),即其類型是auto。
擴展資料:
C語言中提供了存儲說明符auto、register、extern、static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態(tài)存儲期。
其中auto和register對應(yīng)自動存儲期。具有自動存儲期的變量在進入聲明該變量的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數(shù)內(nèi)部定義的變量成為局部變量。在某些C語言教材中,局部變量稱為自動變量,這就與使用可選關(guān)鍵字auto定義局部變量這一作法保持一致。
extern用在變量聲明中常常有這樣一個作用:要在*.c文件中引用另一個文件中的一個全局的變量,那就應(yīng)該放在*.h中用extern來聲明這個全局變量。
extern用于變量的用法:
1、extern int a;//聲明一個全局變量a
2、int a; //定義一個全局變量a
3、extern int a =0 ;//定義一個全局變量a 并給初值。一旦給予賦值,一定是定義,定義才會分配存儲空間。(注意:經(jīng)過測試在GCC中,這樣定義變量是不能通過編譯的,而在VS2013可以)
參考資料來源:百度百科——extern
參考資料來源:百度百科——auto