在 C 語言中,static 可修飾函數、局部變量、全局變量,核心作用可歸納為:隱藏、持久、默認初始化為 0。
// file1.c
static void internal_func() { ... } // 僅本文件可見
// file2.c
void internal_func() { ... } // 不會衝突,可定義同名函數
void counter() {
static int count = 0; // 僅初始化一次
count++;
printf("%d\n", count);
}
int main() {
counter(); // 1
counter(); // 2
counter(); // 3
return 0;
}
// file1.c
static int global_var = 10; // 僅 file1 可見
// file2.c
// extern int global_var; // 鏈接錯誤:找不到符號
int global_var = 20; // 合法,互不干擾
| 變量類型 | 存儲區 | 生命週期 | 作用域 | 默認值 |
|---|---|---|---|---|
| auto 局部變量 | 棧區 | 函數調用期間 | 塊作用域 | 不定值(垃圾值) |
| static 局部變量 | 靜態區 | 程序整個運行期 | 塊作用域 | 0 |
| 全局變量 | 靜態區 | 程序整個運行期 | 文件作用域(外部鏈接) | 0 |
| static 全局變量 | 靜態區 | 程序整個運行期 | 文件作用域(內部鏈接) | 0 |
C++ 繼承了 C 的 static 語義,並新增: