枚舉是一種類型,通過它可以定義枚舉變量
比如:enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }
枚舉和宏其實非常類似:宏在預處理階段將名字替換成對應的值,枚舉在編譯階段將名字替換成對應的值。我們可以將枚舉理解爲編譯階段的宏。
【注意】!
-
枚舉列表中的 Mon、Tues、Wed 這些標識符的作用範圍是全局的(嚴格來說是 main() 函數內部),不能再定義與它們名字相同的變量。
-
Mon、Tues、Wed 等都是常量,不能對它們賦值,只能將它們的值賦給其他的變量。
#include <stdio.h>
int main(){
enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
//這是因爲枚舉值默認從 0 開始,往後逐個加 1(遞增),也可以如上,指定從1開始
int day=5;
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
case Sat: puts("Saturday"); break;
case Sun: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}
輸出爲:
Friday
以上程序如果用宏實現,爲:
#include <stdio.h>
#define Mon 1
#define Tues 2
#define Wed 3
#define Thurs 4
#define Fri 5
#define Sat 6
#define Sun 7
int main(){
int day=5;
switch(day){
case Mon: puts("Monday"); break;
case Tues: puts("Tuesday"); break;
case Wed: puts("Wednesday"); break;
case Thurs: puts("Thursday"); break;
case Fri: puts("Friday"); break;
case Sat: puts("Saturday"); break;
case Sun: puts("Sunday"); break;
default: puts("Error!");
}
return 0;
}
可以看出,使用宏定義看起來代碼會比較鬆散,使用枚舉時的代碼更簡潔緊湊。
參考網站:http://c.biancheng.net/view/2034.html