在函數(shù)體內(nèi)聲明的變量在默認情況下都是auto存儲類型
創(chuàng)新互聯(lián)是一家專注于網(wǎng)站制作、成都做網(wǎng)站與策劃設計,蕭山網(wǎng)站建設哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設10多年,網(wǎng)設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:蕭山等地區(qū)。蕭山做網(wǎng)站價格咨詢:028-86922220
在代碼塊之間傳遞信息的一種方法就是使用外部變量。當一個變量在函數(shù)的外部被聲明時,安的存儲空間是永久分配的,安人存儲類型是extren.外部變量的聲明看上去和函數(shù)或代碼塊內(nèi)部所聲明的變量一樣。外部變量對于它之后的所有函數(shù)都有效。在代碼塊或函數(shù)后,外部變量仍然存在。
static的基本用途是允許一個局部變量在重新進入代碼塊時能夠保持原來的值。這和自動變量形成了鮮明的對比,自動變量在代碼塊時會被銷毀,再次進入這個代碼塊時,它必須重新進行初始化。
register存儲類型告訴編譯器相關的變量應該改量存儲在高速度的寄存器中。使用register存儲類型的目的一般是為了提高執(zhí)行速度,但是,register聲明只是向編譯器所提出的“建議”,并非強制要求。
函數(shù)的存儲類型指的是其他文件模塊可否訪問,其類別可以是extern或static。
static是指該函數(shù)只能被本源程序文件道中的模塊訪問。extern是指可被本源程序文件外的模塊訪問。
C語言中函數(shù)的存儲類型隱含為版全局的,因此默認為extern。
函數(shù)內(nèi)定義的變量,默權認作用域在本函數(shù)內(nèi),即其類型是auto。
擴展資料:
C語言中提供了存儲說明符auto、register、extern、static說明的四種存儲類別。四種存儲類別說明符有兩種存儲期:自動存儲期和靜態(tài)存儲期。
其中auto和register對應自動存儲期。具有自動存儲期的變量在進入聲明該變量的程序塊時被建立,它在該程序塊活動時存在,退出該程序塊時撤銷。在函數(shù)內(nèi)部定義的變量成為局部變量。在某些C語言教材中,局部變量稱為自動變量,這就與使用可選關鍵字auto定義局部變量這一作法保持一致。
extern用在變量聲明中常常有這樣一個作用:要在*.c文件中引用另一個文件中的一個全局的變量,那就應該放在*.h中用extern來聲明這個全局變量。
extern用于變量的用法:
1、extern int a;//聲明一個全局變量a
2、int a; //定義一個全局變量a
3、extern int a =0 ;//定義一個全局變量a 并給初值。一旦給予賦值,一定是定義,定義才會分配存儲空間。(注意:經(jīng)過測試在GCC中,這樣定義變量是不能通過編譯的,而在VS2013可以)
參考資料來源:百度百科——extern
參考資料來源:百度百科——auto
四種變量存儲類型。說明符如下:
auto static extern register
一、auto
auto稱為自動變量。
局部變量是指在函數(shù)內(nèi)部說明的變量(有時也稱為自動變量)。用關鍵字auto進
行說明, 當auto省略時, 所有的非全程變量都被認為是局部變量, 所以auto實際上
從來不用。
二、static
static稱為靜態(tài)變量。根據(jù)變量的類型可以分為靜態(tài)局部變量和靜態(tài)全程變量。
1. 靜態(tài)局部變量
它與局部變量的區(qū)別在于: 在函數(shù)退出時, 這個變量始終存在, 但不能被其它
函數(shù)使用, 當再次進入該函數(shù)時, 將保存上次的結(jié)果。其它與局部變量一樣。
2. 靜態(tài)全程變量
Turbo C將大型程序分成若干獨立模塊文件分別編譯, 然后將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便于軟件的管理和維護。靜態(tài)
全程變量就是指只在定義它的源文件中可見而在其它源文件中不可見的變量。它與
全程變量的區(qū)別是: 全程變量可以再說明為外部變量(extern), 被其它源文件使用,
而靜態(tài)全程變量卻不能再被說明為外部的, 即只能被所在的源文件使用。
三、extern
extern稱為外部變量。為了使變量除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此, 必須將全程變量通知每一個程序模塊文件, 此時可用
extern來說明。
四、register
register稱為寄存器變量。
一、auto auto稱為自動變量。 局部變量是指在函數(shù)內(nèi)部說明的變量(有時也稱為自動變量)。用關鍵字auto進7行說明, 當auto省略時, 所有的非全程變量都被認為是局部變量, 所以auto實際上從來不用。 局部變量在函數(shù)調(diào)用時自動產(chǎn)生, 但不會自動初始化, 隨函數(shù)調(diào)用的結(jié)束, 這個變量也就自動消失了, 下次調(diào)用此函數(shù)時再自動產(chǎn)生, 還要再賦值, 退出時又自動消失。 二、static static稱為靜態(tài)變量。根據(jù)變量的類型可以分為靜態(tài)局部變量和靜態(tài)全程變量。 1. 靜態(tài)局部變量 它與局部變量的區(qū)別在于: 在函數(shù)退出時, 這個變量始終存在, 但不能被其它、函數(shù)使用, 當再次進入該函數(shù)時, 將保存上次的結(jié)果。其它與局部變量一樣。 2. 靜態(tài)全程變量 Turbo C2.0允許將大型程序分成若干獨立模塊文件分別編譯, 然后將所有模塊的目標文件連接在一起, 從而提高編譯速度, 同時也便于軟件的管理和維護。靜態(tài)全程變量就是指只在定義它的源文件中可見而在其它源文件中不可見的變量。它與全程變量的區(qū)別是: 全程變量可以再說明為外部變量(extern), 被其它源文件使用,而靜態(tài)全程變量卻不能再被說明為外部的, 即只能被所在的源文件使用。 三、extern extern稱為外部變量。為了使變量除了在定義它的源文件中可以使用外, 還要被其它文件使用。因此, 必須將全程變量通知每一個程序模塊文件, 此時可用extern來說明。 四、register register稱為寄存器變量。它只能用于整型和字符型變量。定義符register說明的變量被Turbo C2.0存儲在CPU的寄存器中, 而不是象普通的變量那樣存儲在內(nèi)存中, 這樣可以提高運算速度。但是Turbo C2.0只允許同時定義兩個寄存器變量,一旦超過兩個, 編譯程序會自動地將超過限制數(shù)目的寄存器變量當作非寄存器變量來處理。因此, 寄存器變量常用在同一變量名頻繁出現(xiàn)的地方。另外, 寄存器變量只適用于局部變量和函數(shù)的形式參數(shù), 它屬于auto型變量,因此, 不能用作全程變量。定義一個整型寄存器變量可寫成: register int a;
c語言中的存儲類型有static 、auto、extern、及register,函數(shù)默認的存儲類型應該是extern,意思是具有外部鏈接性的。一般來說,會通過extern來聲明函數(shù)。比如下面的代碼,在1.c中定義一個函數(shù),函數(shù)的聲明寫在1.h頭文件中,在2.c中通過添加1.h的頭文件,來聲明及調(diào)用函數(shù)f()。
//1.c
void?f()?{?;?}
//1.h
extern?void?f();
//2.c
#include?"1.h"
int?main()?{?f();}