程序啟動即存在,生命周期贯穿整個程序。關鍵字 static、extern。分為:
static 修飾,僅本文件可見static,函數作用域但生命周期全程static,默認靜態存儲,整個工程可見(extern 聲明跨文件)函數內局部變量(含 auto、register),進入塊創建,離開塊銷毀。register 建議存入寄存器,現代編譯器多自動優化。
| 作用域 | 範圍 | 示例 |
|---|---|---|
| 全局 | 聲明處至文件末尾 | 文件頂層變量 |
| 局部 | 所在語句塊 | 函數內、{} 內變量 |
| 函數原型 | 參數列表 | void f(int x); 中的 x |
內層塊聲明與外層同名標識符時,外層被隱藏直至內層塊結束。最小特權原則建議:優先用局部變量,避免全局變量與同名隱藏。
int a = 1; // 全局 a=1
int main() {
cout << a; // 1
int a = 10; // 局部 a=10 隱藏全局
cout << a; // 10
{ int a = 7; cout << a; } // 7
cout << a; // 10 恢復外層局部
use_Global(); // 訪問全局 a(若函數內無同名)
}
圖示展示了各作用域下 a 的值變化。