C變數及函式儲存型別

2021-10-05 19:18:57 字數 1874 閱讀 6810

變數及函式宣告格式 在c語言中,對於乙個變數的宣告/定義格式如下:儲存型別 型別修飾 資料型別 變數名 其中:

auto儲存型別

auto 只能用來標識變數的儲存型別,意義為自動型別,標識該區域性變數儲存在正在執行的程序棧區域,一般情況,對於區域性變數,auto 為預設的儲存型別,不需要顯示指定。區域性變數的作用域為其所在的一對{}內,生存週期為建立函式到函式結束。區域性變數如果沒有初始化而直接參與計算,系統將會為其分配乙個隨機值,當然,使用是不安全的。

全域性變數及extern宣告的資料

extern關鍵字既可以標識變數,又可以標識函式。對於變數來說,extern用來宣告,在當前檔案中引用()使用,而在當前專案中的其他檔案中定義的全域性變數。因為已經初始化全域性變數被儲存在資料區,所以宣告其他檔案中的全域性變數將不再為其分配記憶體空間。在這裡簡單對宣告和定義變數做乙個說明。定義乙個變數:告訴編譯器需要為該變數分配空間。宣告乙個變數 :告訴編譯器需要使用該變數,但該變數在其他位置被定義。宣告全域性變數可以使用以下兩種方式。

(1)如果該全域性變數在標頭檔案中定義,則在需要使用該變數的檔案中包含相應的標頭檔案即可,但如果多個檔案都引用此標頭檔案,且這些檔案將一起編譯進乙個專案中,如果該全域性變數被初始化了,則有可能造成重複定義(在gcc環境下,在乙個標頭檔案中定義某全域性變數但不初始化,其被多個檔案包含的情況是允許的)。因此,這種方式一般不建議將全域性變數定義在標頭檔案中。

(2)如果該全域性變數在其他檔案中定義(*.c),則在當前檔案中使用extern宣告。

全域性變數的作用域是整個專案的所有檔案,但是,要使用在其它檔案中定義的全域性變數,則需要包含標頭檔案或者extern關鍵字,否則只能在定義它的檔案中被使用。

全域性變數和靜態變數只能被初始化一次,在有些編譯環境或者開發環境中,如果程式中沒有初始化該變數,在編譯時將自動為其賦初值為0

對於函式來說,儲存型別僅僅標識函式的作用域,預設的儲存方式為extern。也就是說,在乙個專案中,如果沒有宣告函式的儲存型別,該函式可以被當前專案中的所有檔案引用。

register儲存型別

register關鍵字只能用於區域性變數。定義儲存型別為register的變數只能是整形和字元型,此關鍵字主要用於表示長期被使用的變數。在執行程式時,所有的資料都將調入到cpu暫存器中才能真正處理(通過組合語言可以很好地了解這一原理),而由於cpu暫存器數量有限,普通的變數儲存在記憶體單元中,只有在使用時才被載入到cpu的暫存器中,使用完馬上清除掉。而定義register的變數常駐cpu的暫存器。

從記憶體載入某個資料到cpu暫存器中至少需要乙個指令週期,因訪問register的變數將在很大程度上提高效率,故暫存器變數被用於迴圈控制是比較理想的。但是,乙個程式中不允許定義太多的暫存器變數,因為cpu的暫存器數量是有限的。

和auto型別資料一樣,未初始化的暫存器變數將被隨機分配乙個初值。另外,使用register型別的區域性變數的情況越來越少。

static儲存型別

static意為靜態的,既可以標識變數,也可以標識函式。被定義為靜態型別的變數(無論是全域性變數還是區域性變數)儲存在資料區,其生命週期為整個程式。如果是靜態區域性變數,其作用域為自身所處的一對{}內,如果是靜態全域性變數,其作用域為當前檔案。

靜態變數如果沒有初始化,將自動初始化為0。靜態變數只會被初始化一次,如下圖所示:

在求和函式sum裡面c是auto變數,根據auto變數特性可知,每次呼叫sum函式時變數c都會自動賦值0.b是static變數,根據static變數特性可知,每次呼叫sum函式時變數b都會使用上次呼叫sum函式時b儲存的值。

另外,被定義為靜態型別的函式的作用域只能是當前檔案,因此不能在專案的其他檔案中被呼叫。將不需要在其他檔案中呼叫的函式宣告為static型別很有必要,這將在一定程度上避免函式名稱的衝突。

常量資料

字串常量儲存在**段,其生存週期為整個程式執行期間。

字串的生存週期為整個程式的執行時間,但作用域為當前檔案。

C變數及函式儲存型別

1.變數及函式宣告格式 在c語言中,對於乙個變數的宣告 定義格式如下 儲存型別 型別修飾符 資料型別 變數名 在c語言中,對於乙個函式的宣告格式如下 儲存型別 返回資料型別 函式名 引數列表 2.儲存型別 1 auto 只能用來標識變數的儲存型別,意義為自動型別,標識該區域性變數儲存在正在執行程序棧...

c 變數儲存型別

extern 儲存型別 只宣告而不定義變數,變數的宣告只是告訴編輯器變數的名稱和資料型別 變數的定義是給變數分配儲存區域 優點就是可以在多個檔案裡面共享乙個全域性變數,static 儲存型別 static指的是靜態變數 又叫永續性變數 靜態變數分為兩種,第一種是區域性靜態變數在函式內定義的變數,該變...

C變數儲存型別

c語言程式中可以選擇變數的不同儲存形式,儲存型別分別為靜態儲存和動態儲存。我們可以通過儲存類修飾符來告訴編譯器要處理什麼樣的型別變數,具體有以下4種 auto 自動 static 靜態 register 暫存器 extern 外部 auto關鍵字是宣告乙個區域性變數為自動的,這就意味每次執行到定義該...