void counter()
{
static int cnt = 0; // 僅初始化一次,存儲於靜態區
printf("%d ", ++cnt);
}
int main()
{
counter(); // 1
counter(); // 2
counter(); // 3
}
// file1.c
static int internal_var = 10; // 僅本檔可見
static void internal_func() { ... } // 僅本檔可呼叫
C 無原生類別,但可模擬:
// counter.h
#ifndef COUNTER_H
#define COUNTER_H
void counter_increment(void);
int counter_get(void);
#endif
// counter.c
#include "counter.h"
static int count = 0; // 模組私有狀態
void counter_increment(void) { count++; }
int counter_get(void) { return count; }
| 儲存類別 | 區段 | 生命週期 | 預設初值 |
|---|---|---|---|
| auto (區域) | 堆疊 | 函數呼叫期間 | 不定 (垃圾值) |
| static (區域) | .data/.bss | 程式全程 | 0 |
| static (全域) | .data/.bss | 程式全程 | 0 |
| extern (全域) | .data/.bss | 程式全程 | 0 |