auto,函數內無存儲類別聲明預設為 auto。extern,定義在所有函數外,靜態存儲,生存期=程序全期。extern int a;)僅告知編譯器類型與名字,不分配空間,可多次聲明。int a; 定義,他檔 extern int a; 聲明即可使用。static,靜態存儲,生存期=程序全期。void f() { static int c=0; printf("%d ", ++c); } 連續調用輸出 1 2 3…register,建議編譯器放入 CPU 寄存器,極快但數量有限、不可取址(& 非法)。| 類別 | 關鍵字 | 存儲方式 | 生存期 | 作用域 | 可取址 | 典型用途 |
|---|---|---|---|---|---|---|
| 自動 | auto | 動態(棧) | 調用期 | 塊級 | 是 | 普通局部變量 |
| 寄存器 | register | 動態(寄存器/棧) | 調用期 | 塊級 | 否 | 高頻計數器 |
| 外部 | extern | 靜態 | 程序期 | 全程(跨檔) | 是 | 全局共享數據 |
| 靜態 | static | 靜態 | 程序期 | 塊級/檔案級 | 是 | 保持狀態/檔案封裝 |