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

C語言枚舉 enum 完整指南:默認值、指定值、重復值與作用域規則

     編輯:關於C語言

枚舉基礎:編譯期常量的類型安全別名

enum 定義一組命名整數常量,增強代碼可讀性,編譯器可做類型檢查(部分),調試器顯示符號名而非數字。

四種定義模式實測

1. 默認遞增(從 0 開始)


enum Weekday { SUN, MON, TUE, WED, THU, FRI, SAT };
// SUN=0, MON=1, ..., SAT=6

2. 指定起始值


enum Weekday { SUN = 9, MON, TUE, WED, THU, FRI, SAT };
// SUN=9, MON=10, ..., SAT=15

3. 中間指定值打破遞增


enum Weekday { SUN = 9, MON, TUE, WED = 3, THU, FRI, SAT };
// SUN=9, MON=10, TUE=11, WED=3, THU=4, FRI=5, SAT=6

4. 允許重復值(不同名稱同值)


enum Weekday { SUN = 9, MON = 5, TUE, WED = 3, THU = 7, FRI = 2, SAT = 9 };
// SUN=9, MON=5, TUE=6, WED=3, THU=7, FRI=2, SAT=9 (SUN與SAT同值)

枚舉變量定義與使用


// 定義枚舉類型同時聲明變量
enum Weekday { SUN, MON, TUE, WED, THU, FRI, SAT } a, b, c;

// 後續聲明
enum Weekday d, e, f;

// 賦值
a = SUN; b = MON; c = TUE;
d = WED; e = THU; f = FRI;

printf("%d,%d,%d,%d,%d,%d\n", a,b,c,d,e,f);  // 輸出: 0,1,2,3,4,5

關鍵規則與避坑

規則說明示例
枚舉常量為 int 類型兼容 int 運算,但建議保持類型語義int x = MON + 1; // 合法但失去語義
賦值表達式必須為編譯期常量不能用變量/函數調用enum { A = foo() }; // 錯誤
作用域遵循普通標識符規則同一作用域內枚舉常量名不可重復enum { X }; enum { X }; // 錯誤
匿名枚舉常量注入當前作用域enum { RED, GREEN }; 直接使用 RED常用於常量組定義
C++11 enum class 強類型枚舉不隱式轉 int,作用域隔離,需 Color::RED現代 C++ 首選,C 不支援

實戰模式:位掩碼枚舉


enum FilePerm {
    READ  = 1 << 0,  // 0x01
    WRITE = 1 << 1,  // 0x02
    EXEC  = 1 << 2,  // 0x04
    RW    = READ | WRITE,  // 0x03
    RWX   = READ | WRITE | EXEC  // 0x07
};

int perm = READ | WRITE;  // 組合權限
if (perm & EXEC) { /* 可執行 */ }

總結

枚舉本質是編譯期整數常量的別名表。善用默認遞增減少維護成本,關鍵值顯式指定避免耦合,位掩碼模式構建類型安全標誌位。**現代 C++ 請優先使用 enum class**,C 語言中保持「枚舉名大寫、值語義清晰」即可寫出可維護代碼。

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