1. 前言
在C語言中,enum
(列舉型別)是提升程式可讀性與維護性的重要工具。本文將詳細介紹enum
的基本用法到進階應用。無論是初學者還是中階使用者,只要閱讀本指南,就能掌握enum
的使用技巧,並提升撰寫C語言程式的效率。
2. 什麼是enum
?
enum
的定義與作用
enum
(列舉型別)是一種用來定義常數集合的資料型別。通常用來為一組相關的常數命名,讓程式更易於識別。例如,在程式中處理顏色時,若僅用數字管理並不直觀,但透過enum
可用RED
、GREEN
、BLUE
等名稱定義顏色。
為什麼要使用enum
?
使用enum
有以下幾個優點:
- 提升程式可讀性:用名稱表示數值,讓程式內容一目了然。
- 便於維護:當常數集合需要修改時,利用
enum
可將影響降到最低。 - 預防錯誤:想限定特定取值時,
enum
能有效防止錯誤的數值被使用。

3. enum
的基本用法
enum
的定義方法
基本的enum
定義如下:
enum { RED, GREEN, BLUE };
這裡RED
會自動被賦值為0,GREEN
為1,BLUE
為2。若要為enum
命名,可以這樣寫:
enum Color { RED, GREEN, BLUE };
這樣就建立了一個名稱為Color
的enum
,並可用此名稱宣告變數。
實際範例程式碼
以下是使用enum
的簡單範例:
#include <stdio.h>
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color;
color = RED;
printf("%dn", color); // 輸出:0
return 0;
}
此程式會輸出RED
的值(0
)。
4. enum
的進階用法
enum
的自動與手動賦值
enum
預設會自動從0
、1
、2
…開始依序給值,也可以手動指定特定數值。
enum Days {
MONDAY = 1,
TUESDAY,
WEDNESDAY,
THURSDAY = 10,
FRIDAY
};
在這個例子中,MONDAY
被設為1
,TUESDAY
為2
,THURSDAY
為10
,而FRIDAY
則自動變為11
。
搭配switch-case
語句使用enum
enum
經常與switch-case
語句搭配使用。透過enum
,條件判斷更加明確易懂。
enum Color { RED, GREEN, BLUE };
int main() {
enum Color color = BLUE;
switch(color) {
case RED:
printf("Redn");
break;
case GREEN:
printf("Greenn");
break;
case BLUE:
printf("Bluen");
break;
default:
printf("Unknown colorn");
}
return 0;
}
根據color
的值,程式會顯示不同訊息。使用enum
讓switch-case
結構更清楚。
將enum
作為陣列索引使用
enum
也可以用來當作陣列的索引值。
enum Color { RED, GREEN, BLUE };
char* color_names[] = { "Red", "Green", "Blue" };
printf("%sn", color_names[RED]); // 輸出:Red
這樣可直接用enum
的值來取得對應的字串。

5. enum
的注意事項與最佳實踐
值重複與超出範圍的值
enum
內允許有重複的值,但從可讀性與維護性來看,應盡量避免。
enum Days {
MONDAY = 1,
FRIDAY = 1
};
這樣MONDAY
與FRIDAY
會有相同的值,可能導致不預期的行為。另外,enum
型別的變數也可被賦予未定義的值,這點同樣要注意。
enum Days { MONDAY = 1, TUESDAY = 2 };
enum Days day = 8; // 這樣不會編譯錯誤
用enum
提升程式可讀性
enum
建議積極使用,能明確表達邏輯、減少Bug發生,程式更易於維護。
6. enum
實用範例
比較有無使用enum
的程式碼
來比較不用enum
與用enum
的程式碼:
未使用enum
的情況
void findNearest(int day) {
switch(day) {
case 0:
printf("今天n");
break;
case 1:
printf("1天前n");
break;
// 省略
}
}
使用enum
的情況
enum Days { TODAY, YESTERDAY };
void findNearest(Days day) {
switch(day) {
case TODAY:
printf("今天n");
break;
case YESTERDAY:
printf("1天前n");
break;
// 省略
}
}
使用enum
能讓邏輯更清楚、可讀性更高。

7. 結論
enum
是C語言中強大的功能,能提升程式的可讀性與維護性。只要掌握enum
的用法,就能寫出更有效率、更穩定的程式。希望本文能幫助你從基礎到進階理解enum
,實際應用在開發中。