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

C語言枚舉 enum 詳解:預設值、指定值與常見陷阱

     編輯:關於C

基本語法

enum OS { WIN, LINUX, UNIX }; // 預設 0, 1, 2
enum OS2 { WIN=1, LINUX, UNIX=12 }; // 1, 2, 12

核心規則

  1. 第一個成員未指定 → 0。
  2. 後續未指定成員 → 前一個值 +1。
  3. 可指定任意整數常量表達式(含負數、重複值)。
  4. 枚舉常量屬於 編譯期常量,可用於 case 標籤、位欄寬度、陣列大小 (C99 VLA 除外)。
  5. 枚舉類型本身相容於某整數型型別 (通常是 int)。

實戰範例

enum Color { RED=0xFF0000, GREEN=0x00FF00, BLUE=0x0000FF };
enum Bool { FALSE=0, TRUE=1 }; // 類布林
enum State { IDLE, RUNNING, ERROR=-1 }; // 負數錯誤碼

// switch 完整性檢查 (GCC -Wswitch-enum)
void handle(enum State s) {
    switch(s) {
        case IDLE: break;
        case RUNNING: break;
        case ERROR: break;
        // 無 default,漏寫會警告
    }
}

常見誤區

誤區事實
enum 變數只能存枚舉值enum 變數本質是 int,可存任意整數 (編譯器可能警告)
sizeof(enum) == sizeof(int)實作定義,可能是 char/short/int/long,視範圍而定
前向宣告 enumC 標準不支援前向宣告枚舉 (C++11 支援 enum class 前向宣告)

現代替代:C23 / C++11 enum class

// C++11 強類型枚舉,不隱式轉 int,作用域隔離
enum class Color : uint32_t { RED=0xFF0000, GREEN, BLUE };
// Color c = Color::RED; // 必須帶作用域
// int x = c; // 編譯錯誤,需 static_cast
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved