auto 是 C 語言最古老的關鍵字之一,早期用於明確宣告「自動儲存類別」區域變數 (預設行為)。C++11 後被重新定義為型別推導,但 C 標準仍保留原意。現代 C 程式碼極少顯式寫 auto,因區域變數預設即為自動儲存期。
#include
int main() {
int i, num = 2;
for (i = 0; i < 3; i++) {
printf("The num equal %d\n", num); // 外層 num
num++;
{
auto int num = 1; // 內層區塊定義新 num,遮蔽外層
printf("The internal block num equal %d\n", num);
num++; // 只修改內層 num
}
// 內層區塊結束,內層 num 銷毀,外層 num 恢復可見
}
return 0;
}
The num equal 2
The internal block num equal 1
The num equal 3
The internal block num equal 1
The num equal 4
The internal block num equal 1

main 函式,生命週期從定義處開始至 main 結束{ ... } 區塊內,生命週期隨區塊進入/離開而建立/銷毀num 綁定內層實體auto:C 語言區域變數預設即為自動儲存,顯式寫出累贅且易誤導 (C++11 語意不同){ ... } 限制變數可見範圍,減少命名衝突與誤用inner_num)auto:僅用於型別推導 (auto x = expr;),與 C auto 完全無關| 關鍵字 | 儲存位置 | 預設初值 | 作用域 | 生命週期 |
|---|---|---|---|---|
| auto | 堆疊 | 亂碼 (未初始化) | 區塊 | 區塊執行期間 |
| register | 暫存器/堆疊 | 亂碼 | 區塊 | 區塊執行期間 |
| static | 靜態區 | 0 | 區塊/檔案 | 程式全程 |
| extern | 靜態區 | 0 | 全域 (跨檔案) | 程式全程 |