static int flag1 = 0; // 僅本檔案可見 int flag2 = 0; // 外部連結,他檔案可用 extern 存取
static 限制連結可見性,防止符號衝突void func(void) {
static int temp1 = 0; // 全域資料區,具記憶性
int temp2 = 0; // 堆疊區,函數結束即銷毀
// ...
}
temp1 生命週期 = 程式執行期間,但可見範圍僅限函數內temp2 每次呼叫重新初始化static inline void enable_noirq(void) {
// 僅本檔案可呼叫
}
| 修飾對象 | 儲存區域 | 可見範圍 | 生命週期 | 核心用途 |
|---|---|---|---|---|
| 全域變數 | 全域資料區 | 僅本檔案 | 程式執行期間 | 模組封裝、避免符號汙染 |
| 區域變數 | 全域資料區 | 僅所在函數 | 程式執行期間 | 狀態保持、計數器、單例模式 |
| 函數 | 程式碼區 | 僅本檔案 | 程式執行期間 | 內部介面、隱藏實作 |
善用 static 是撰寫模組化、可維護 C 程式的關鍵技巧。