基本語法
enum OS { WIN, LINUX, UNIX }; // 預設 0, 1, 2
enum OS2 { WIN=1, LINUX, UNIX=12 }; // 1, 2, 12
核心規則
- 第一個成員未指定 → 0。
- 後續未指定成員 → 前一個值 +1。
- 可指定任意整數常量表達式(含負數、重複值)。
- 枚舉常量屬於 編譯期常量,可用於 case 標籤、位欄寬度、陣列大小 (C99 VLA 除外)。
- 枚舉類型本身相容於某整數型型別 (通常是 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,視範圍而定 |
| 前向宣告 enum | C 標準不支援前向宣告枚舉 (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