C語言中每個函數是獨立代碼塊,內部代碼對外隱蔽,不可被其他函數直接訪問(除調用語句)。所有函數處於同一作用域級別,**不允許函數嵌套定義**。理解作用域與存儲類別,是掌握變量生命週期、避免命名衝突、編寫模塊化代碼的關鍵。
{})內部。auto(默認可省略)。
void func1() { int x = 10; /* ... */ }
void func2() { int x = 20; /* ... */ }
// 兩個 x 互不相關,各自在自己的函數塊內有效
void example() {
if (condition) {
int s = 0; // 僅在 if 塊內分配內存、可見
// 使用 s
}
// 此處 s 已銷毀,內存釋放
}
優點:僅在需要時分配內存,對內存受限嵌入式系統尤為重要。
int count = 0; // 全局
void func2() {
int count = 5; // 局部遮蔽全局
// 此處訪問 count 僅指局部變量
}
局部變量與全局變量同名時,**函數內所有訪問均針對局部變量**,全局變量被遮蔽但不受影響。利用此特性可避免命名衝突,但若忘記易導致難查的 Bug。
auto int a,b,c;(auto 可省略)。register int x,y,z; 請求存入 CPU 寄存器提速,但數量有限,系統可能忽略。static。
void f() {
static int x = 0; // 僅初始化一次
x++;
printf("%d ", x);
}
main() { f(); f(); f(); } // 輸出:1 2 3
每次調用 f() 時 x 保留上次遞增後的值,實現跨調用狀態保持。
深刻理解作用域與存儲類別,合理選擇局部/全局、動態/靜態變量,是編寫健壯、可維護、可復用 C 代碼的核心功力。