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

C 語言枚舉類型:讓有限取值更具可讀性

     編輯:C 語言基礎

實際開發中,某些變數的取值範圍固定且有限(如一週七天、十二個月)。使用 #define 雖可行,但會造成巨集名稱汙染、程式碼分散。C 語言提供枚舉類型,可集中列出所有可能值並賦予名稱。

枚舉定義語法

enum 類型名 {
    值名1, 值名2, 值名3, ...
};
  • enum 為關鍵字,專門用於定義枚舉。
  • 枚舉值預設從 0 開始遞增 1。
  • 可手動指定值,或僅指定首個值,其餘自動遞增。

各種定義方式示例

// 預設從 0 開始
enum week { Mon, Tues, Wed, Thurs, Fri, Sat, Sun }; // 0~6

// 全部手動指定
enum week { Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };

// 僅指定首個值,其餘遞增
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }; // 1~7

枚舉變數宣告與使用

enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat; // 宣告並初始化

// 或合併寫法
enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;

完整範例:判斷星期幾

#include <stdio.h>
int main() {
    enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day;
    scanf("%d", &day);
    switch (day) {
        case Mon: puts("Monday"); break;
        case Tues: puts("Tuesday"); break;
        case Wed: puts("Wednesday"); break;
        case Thurs: puts("Thursday"); break;
        case Fri: puts("Friday"); break;
        case Sat: puts("Saturday"); break;
        case Sun: puts("Sunday"); break;
        default: puts("Error!");
    }
    return 0;
}

枚舉本質與關鍵特性

  1. 編譯期常量替換:枚舉名稱在編譯階段被替換為對應整數,不佔用資料區記憶體,直接嵌入程式碼區,故不能取址(&)。
  2. 作用域全域:列表中的識別符作用域為全域(或函數內部),不可重複定義同名變數。
  3. 不可修改:枚舉項為常量,只能將其值賦給其他變數,不能對其賦值。
  4. 適用於 switch case:因最終為整數常量,符合 case 後需為整數常量表達式的要求。

枚舉與巨集的比較

巨集在預處理階段字串替換,枚舉在編譯階段常量替換。可視為「編譯期的巨集」,具備型別檢查、作用域限制等優勢。

枚舉類型大小驗證

#include <stdio.h>
int main() {
    enum week { Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } day = Mon;
    printf("%d, %d, %d, %d, %d\n",
           sizeof(enum week), sizeof(day), sizeof(Mon), sizeof(Wed), sizeof(int));
    // 輸出:4, 4, 4, 4, 4  → 通常與 int 相同
    return 0;
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved