由 typedef 和 enum 關鍵字我們可以定義一個只能有某些值的型別。

這是 typedef 列舉型別的語法:

typedef enum {
 //...values
} TYPENAME;

所創建的列舉型別通常是大寫。

以下是一個簡單的例子:

typedef enum {
 true,
 false
} BOOLEAN;

C 語言已經內建了 bool 型別,所以這個例子並不實用,但是你可以了解到這個概念。

另一個例子是定義星期幾:

typedef enum {
 monday,
 tuesday,
 wednesday,
 thursday,
 friday,
 saturday,
 sunday
} WEEKDAY;

這是一個使用這個列舉型別的簡單程式:

#include <stdio.h>

typedef enum {
 monday,
 tuesday,
 wednesday,
 thursday,
 friday,
 saturday,
 sunday
} WEEKDAY;

int main(void) {
 WEEKDAY day = monday;

 if (day == monday) {
 printf("It's monday!");
 } else {
 printf("It's not monday");
 }
}

列舉型別中的每個項目都會被對應到一個整數。所以在這個例子中,monday 對應到 0,tuesday 對應到 1,以此類推。

這意味著條件判斷也可以寫成 if (day == 0) 而不是 if (day == monday),但是我們人類更容易用名稱理解,而不是數字,所以這個語法非常方便。