首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言存儲類別修飾符深度解析:auto、register、static、const、volatile

     編輯:關於C語言

五大修飾符核心差異速查

關鍵字存儲位置生命週期作用域核心用途
auto棧塊級塊級默認隱式,極少顯式使用
register寄存器/棧塊級塊級提示編譯器優化熱點變量
static全局區/靜態區程序全程文件/塊級保持狀態、限制鏈接、延遲初始化
const只讀區/棧視定義處視定義處只讀語義、優化提示、API 契約
volatile內存視定義處視定義處阻止優化、硬件映射、多線程共享

static 三大經典場景

  1. 函數調用計數器:static int cnt = 0; cnt++; 保持調用間狀態
  2. 大型局部數組緩存:避免重複棧分配初始化開銷
  3. 模塊私有變量:static int internal_var; 禁止外部 extern 訪問,降低耦合

const 進階:指針與常量的組合爆炸

const int *p1;      // *p1 不可變,p1 可變
int *const p2;      // p2 不可變,*p2 可變
const int *const p3; // 都不可變

/* typedef 陷阱 */
typedef char *pStr;
const pStr p4;      // 等價於 char *const p4,而非 const char *

口訣:畫垂線分左右,const 貼誰修飾誰。

volatile 實戰:多線程標誌位

volatile int flag = 0;
void thread_func() {
    while (flag != 1) sleep(1);  // 無 volatile 會被優化為無限循環
}

const volatile 組合用於只讀硬件寄存器(如狀態寄存器):硬件可改、軟件不可改。

extern 补充

聲明而非定義,告訴編譯器「符號在別處」,常用於跨文件共享全局變量/函數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved