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

C 語言變量聲明細節:多變量鏈式聲明、const/volatile 修飾符、編譯器優化陷阱

     編輯:關於C

多變量聲明等價展開

int i, j, k = 0;
// 等價於
int i = 0, j = 0, k = 0; // 注意:只有 k 顯式初始化,i/j 未初始化(垃圾值)!
// 正確鏈式初始化
int i = 0, j = 0, k = 0;

const 修飾符

const int num = 20;
num = 30; // 編譯錯誤:l-value specifies const object

volatile + const 組合陷阱

volatile const int num = 20;
int *p = #
*p = 10; // 通過指針修改 const 變量
printf("%d", num); // 輸出 10
  • volatile 告訴編譯器:該變量可能被外部(硬件、中斷、其他線程)修改,**禁止優化掉讀寫**;
  • 配合 const 表示「代碼不主動修改,但值可能變」,常用於映射硬件寄存器;
  • 通過指針去修改 const 變量屬於未定義行為,但加 volatile 後編譯器不敢優化,實際上生效(僅限特定平台)。

工程建議

  • 每行聲明一個變量,初始化明確;
  • 只讀參數、全局常量加 const;
  • 硬件寄存器、信號處理標誌、多線程共享標誌用 volatile;
  • 不要嘗試通過指針修改 const 對象,行為不可移植。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved