儲存類定義 c 程式中變數/函式的範圍(可見性)和生命週期。這些說明符放置在它們所修飾的型別之前。下面列出 c 程式中可用的儲存類:
auto儲存類是所有區域性變數預設的儲存類。
上面的例項定義了兩個帶有相同儲存類的變數,auto 只能用在函式內,即 auto 只能修飾區域性變數。register儲存類用於定義儲存在暫存器中而不是 ram 中的區域性變數。這意味著變數的最大尺寸等於暫存器的大小(通常是乙個詞),且不能對它應用一元的 '&' 運算子(因為它沒有記憶體位置)。
暫存器只用於需要快速訪問的變數,比如計數器。還應注意的是,定義 'register' 並不意味著變數將被儲存在暫存器中,它意味著變數可能儲存在暫存器中,這取決於硬體和實現的限制。static儲存類指示編譯器在程式的生命週期內保持區域性變數的存在,而不需要在每次它進入和離開作用域時進行建立和銷毀。因此,使用 static 修飾區域性變數可以在函式呼叫之間保持區域性變數的值。
static 修飾符也可以應用於全域性變數。當 static 修飾全域性變數時,會使變數的作用域限制在宣告它的檔案內。
全域性宣告的乙個 static 變數或方法可以被任何函式或方法呼叫,只要這些方法出現在跟 static 變數或方法同乙個檔案中。
以下例項演示了 static 修飾全域性變數和區域性變數的應用:
#include /* 函式宣告 */ void func1(void); static int count=10; /* 全域性變數 - static 是預設的 */ int main() return 0; } void func1(void)
例項中 count 作為全域性變數可以在函式內使用,thingy 使用 static 修飾後,不會在每次呼叫時重置。
可能您現在還無法理解這個例項,因為我已經使用了函式和全域性變數,這兩個概念目前為止還沒進行講解。即使您現在不能完全理解,也沒有關係,後續的章節我們會詳細講解。當上面的**被編譯和執行時,它會產生下列結果:
thingy 為 6 , count 為 9extern儲存類用於提供乙個全域性變數的引用,全域性變數對所有的程式檔案都是可見的。當您使用extern時,對於無法初始化的變數,會把變數名指向乙個之前定義過的儲存位置。thingy 為 7 , count 為 8
thingy 為 8 , count 為 7
thingy 為 9 , count 為 6
thingy 為 10 , count 為 5
thingy 為 11 , count 為 4
thingy 為 12 , count 為 3
thingy 為 13 , count 為 2
thingy 為 14 , count 為 1
thingy 為 15 , count 為 0
當您有多個檔案且定義了乙個可以在其他檔案中使用的全域性變數或函式時,可以在其他檔案中使用 extern 來得到已定義的變數或函式的引用。可以這麼理解,extern 是用來在另乙個檔案中宣告乙個全域性變數或函式。
extern 修飾符通常用於當有兩個或多個檔案共享相同的全域性變數或函式的時候,如下所示:
第乙個檔案:main.c
#include int count ; extern void write_extern(); int main()
第二個檔案:support.c
#include extern int count; void write_extern(void)
在這裡,第二個檔案中的 extern 關鍵字用於宣告已經在第乙個檔案 main.c 中定義的 count。現在 ,編譯這兩個檔案,如下所示:
$ gcc main.c support.c這會產生a.out可執行程式,當程式被執行時,它會產生下列結果:
count is 5
C語言儲存類
好久沒有寫過文章,今天閒來無事,就寫一篇文章解解悶,如有不到之處,請諒解。而今天談到的內容呢?就是c語言儲存類。1 儲存類有哪幾種?自動 auto 靜待 static 暫存器 register 外部 extern 四大類。2 什麼是自動 auto 舉個栗子 auto int a,而a呢?就是儲存方式...
C語言儲存類 鏈結
儲存型別 c語言為變數提供了5種不同的儲存型別,或者稱為儲存類。注意 所用的儲存型別修飾變數和修飾函式的作用是一樣的 分別是 自動儲存 auto 宣告乙個自動變數 靜態儲存 static 宣告乙個靜態變數,或宣告乙個內部連線函式和全域性變數 外部儲存 extem 宣告乙個暫存器儲存類變數 暫存器儲存...
C語言 儲存類說明符
一 儲存類有關c語言的儲存類,推薦的參考資料 c primer plus,其中有一章專門講解這個 在理解c的儲存類之前,首先要搞懂的概念有 作用域 生存週期 連線屬性c中的儲存類說明符實際上是上述屬性的不同組合 作用域 乙個c變數的作用域可以是 塊作用域 在函式內部 塊中定義的變數 形參,稱為 區域...