c語言中的枚舉——類似於宏,卻更簡潔

枚舉是一種類型,通過它可以定義枚舉變量

比如:enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun }

枚舉和宏其實非常類似:宏在預處理階段將名字替換成對應的值,枚舉在編譯階段將名字替換成對應的值。我們可以將枚舉理解爲編譯階段的宏。

【注意】!

  1. 枚舉列表中的 Mon、Tues、Wed 這些標識符的作用範圍是全局的(嚴格來說是 main() 函數內部),不能再定義與它們名字相同的變量。

  2. 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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章