C 語言中的儲存類



C 儲存類定義了 C 程式中變數和/或函式的作用域(可見性)和生命週期。它們位於要修改的型別之前。

在 C 程式中,我們有四種不同的儲存類 -

  • auto
  • register
  • static
  • extern

auto 儲存類

auto 是在函式或程式碼塊內部宣告的所有變數的預設儲存類。可選的關鍵字“auto”可用於定義區域性變數。

auto 變數的作用域和生命週期在其宣告的同一程式碼塊內。

auto 儲存類的示例

以下程式碼語句演示了自動 (auto) 變數的宣告 -

{
   int mount;
   auto int month;
}

上面的示例在同一個儲存類中定義了兩個變數。'auto' 只能在函式內部使用,即區域性變數。

register 儲存類

register 儲存類用於定義應儲存在暫存器而不是 RAM 中的區域性變數。這意味著變數的最大大小等於暫存器大小(通常是一個字),並且不能對其應用一元“&”運算子(因為它沒有記憶體位置)。

register 應僅用於需要快速訪問的變數,例如計數器。還應注意,定義“register”並不意味著變數將儲存在暫存器中。這意味著它可能會儲存在暫存器中,具體取決於硬體和實現限制。

register 儲存類的示例

以下程式碼語句演示了暫存器變數的宣告 -

{
   register int  miles;
}

static 儲存類

static 儲存類指示編譯器在程式的生命週期內保持區域性變數的存在,而不是在每次進入和退出作用域時建立和銷燬它。因此,使區域性變數成為靜態變數允許它們在函式呼叫之間保持其值。

static 修飾符也可以應用於全域性變數。這樣做會導致該變數的作用域限制在其宣告的檔案中。

在 C 程式設計中,當在全域性變數上使用static時,它會導致其類的所有物件共享該成員的一個副本。

static 儲存類的示例

以下示例演示了在 C 程式中使用 static 儲存類 -

#include <stdio.h>
 
/* function declaration */
void func(void);
 
static int count = 5; /* global variable */
 
main(){

   while(count--) {
      func();
   }
	
   return 0;
}

/* function definition */
void func(void) {

   static int i = 5; /* local static variable */
   i++;

   printf("i is %d and count is %d\n", i, count);
}

輸出

當編譯並執行上述程式碼時,它會產生以下結果 -

i is 6 and count is 4
i is 7 and count is 3
i is 8 and count is 2
i is 9 and count is 1
i is 10 and count is 0

extern 儲存類

extern 儲存類用於提供對所有程式檔案可見的全域性變數的引用。當使用“extern”時,變數不能初始化,但它會將變數名稱指向之前定義的儲存位置。

當您有多個檔案並且您定義了一個全域性變數或函式,該變數或函式也將在其他檔案中使用時,則將在另一個檔案中使用extern來提供已定義變數或函式的引用。為了理解,extern用於在另一個檔案中宣告全域性變數或函式。

extern 修飾符最常用於兩個或多個檔案共享相同的全域性變數或函式,如下所述。

extern 儲存類的示例

extern 儲存類的示例可能包含兩個或多個檔案。以下是一個演示在 C 語言中使用 extern 儲存類的示例 -

第一個檔案:main.c

#include <stdio.h>
 
int count;
extern void write_extern();
 
main(){
   count = 5;
   write_extern();
}

第二個檔案:support.c

#include <stdio.h>
 
extern int count;
 
void write_extern(void) {
   printf("Count is %d\n", count);
}

在這裡,extern用於在第二個檔案中宣告count,而它在第一個檔案(main.c)中定義。現在,編譯這兩個檔案,如下所示 -

$gcc main.c support.c

它將生成可執行程式a.out。當執行此程式時,它將產生以下輸出 -

Count is 5

儲存類的使用

儲存類用於定義變數的作用域、可見性、生命週期和初始(預設)值。

儲存類的總結

下表總結了具有不同儲存類的變數的作用域、預設值和生命週期 -

儲存類 名稱 記憶體 作用域,預設值 生命週期
auto 自動 內部記憶體 區域性作用域,垃圾值 在其宣告的同一函式或程式碼塊內。
register 暫存器 暫存器 區域性作用域,0 在其宣告的同一函式或程式碼塊內。
static 靜態 內部記憶體 區域性作用域,0 在程式內,即只要程式正在執行。
extern 外部 內部記憶體 全域性作用域,0 在程式內,即只要程式正在執行。
廣告