| 關鍵字 | 存儲位置 | 生命週期 | 作用域 | 核心用途 |
|---|---|---|---|---|
| auto | 棧 | 塊級 | 塊級 | 默認隱式,極少顯式使用 |
| register | 寄存器/棧 | 塊級 | 塊級 | 提示編譯器優化熱點變量 |
| static | 全局區/靜態區 | 程序全程 | 文件/塊級 | 保持狀態、限制鏈接、延遲初始化 |
| const | 只讀區/棧 | 視定義處 | 視定義處 | 只讀語義、優化提示、API 契約 |
| volatile | 內存 | 視定義處 | 視定義處 | 阻止優化、硬件映射、多線程共享 |
static int cnt = 0; cnt++; 保持調用間狀態static int internal_var; 禁止外部 extern 訪問,降低耦合const int *p1; // *p1 不可變,p1 可變
int *const p2; // p2 不可變,*p2 可變
const int *const p3; // 都不可變
/* typedef 陷阱 */
typedef char *pStr;
const pStr p4; // 等價於 char *const p4,而非 const char *
口訣:畫垂線分左右,const 貼誰修飾誰。
volatile int flag = 0;
void thread_func() {
while (flag != 1) sleep(1); // 無 volatile 會被優化為無限循環
}
const volatile 組合用於只讀硬件寄存器(如狀態寄存器):硬件可改、軟件不可改。
聲明而非定義,告訴編譯器「符號在別處」,常用於跨文件共享全局變量/函數。