基本語法
enum 枚舉名 { 標識符1, 標識符2, ... };
- 第一個成員預設值為 0,後續遞增 1。
- 可手動指定任意整數值,後續成員在前一值基礎上 +1。
- 枚舉常量屬於編譯期常數,可用於
switch、陣列大小、#if 等。
範例一:預設遞增
#include <stdio.h>
enum OS { WIN, LINUX, UNIX }; // 0, 1, 2
int main() {
printf("%d %d %d\n", WIN, LINUX, UNIX);
return 0;
}
// 輸出:0 1 2
範例二:手動指定值
#include <stdio.h>
enum OS { WIN = 1, LINUX, UNIX = 12 }; // 1, 2, 12
int main() {
printf("%d %d %d\n", WIN, LINUX, UNIX);
return 0;
}
// 輸出:1 2 12
進階用法
- 位元旗標:
enum { READ = 1<<0, WRITE = 1<<1, EXEC = 1<<2 }; 方便位運算組合。
- 強型別模擬:搭配
typedef enum {...} Type; 增加語意清晰度。
- 反向查找:C 標準庫無內建,需自建映射表或用
switch 反推名稱。
注意事項
- 枚舉成員在同一作用域內不可重名。
- 底層類型由編譯器決定 (通常為
int),不可假設大小。
- C++11
enum class 提供作用域隔離與強型別,C 語言無對應機制。