一、枚舉是用來幹嗎的?
(1)枚舉在C語言中實際上是一些符號常量集。直白點說:枚舉定義了一些符號,這些符號的本質就是int類型的常量,
每一個符號和一個常量綁定。這個符號就表示一個自定義的一個識別碼,編譯器對枚舉的認知就是符號常量所綁定的那個
int類型的數字。
(2)枚舉符號常量和其對應的常量數字相對來講,數字不重要,符號才重要。符號對應的數字只要彼此不相同便可,
沒有別的要求。因此通常狀況下咱們都不明確指定這個符號對應的數字,而讓編譯器自動分配。(編譯器自動分配的原則
是:從0開始依次增長。若是用戶本身定義了一個值,則從那個值開始日後依次增長)
二、C語言爲什麼須要枚舉
(1)C語言沒有枚舉是能夠的。使用枚舉其實就是對一、0這些數字進行符號化編碼,這樣的好處就是編程時能夠不用看數字
而直接看符號。符號的意義是顯然的,一眼能夠看出。而數字所表明的含義除非看文檔或者註釋。
(2)宏定義的目的和意義是:不用數字而用符號。從這裏能夠看出:宏定義和枚舉有內在聯繫。宏定義和枚舉常常用來解決
相似的問題,他們倆基本至關能夠互換,可是有一些細微差異。
三、宏定義和枚舉的區別
(1)枚舉是將多個有關聯的符號封裝在一個枚舉中,而宏定義是徹底散的。也就是說枚舉實際上是多選一。
(2)什麼狀況下用枚舉:當咱們要定義的常量是一個有限集合時(譬如一星期有7天,一個月有30天,一年12個月……),
最適合用枚舉。其實用宏定義也行,可是枚舉更好。
(3)不能用枚舉的狀況下(定義的常量符號之間無關聯,或者無限的)用宏定義。
總結:宏定義先出現,用來解決符號常量的問題:後來人們發現有時候定義的符號常量彼此之間有關聯(多選一的關係),
用宏定義來作雖然能夠可是不貼切,因此發明了枚舉來解決這種狀況。編程
1 #include <stdio.h> 2 3 enum return_value //這個枚舉用來表示返回值,ERROR表示錯誤,RIGHT表示正確 4 { 5 ERROR, //枚舉常量是全局的,直接能夠用 6 RIGHT, 7 }; 8 9 enum return_value func1(void); 10 11 int main(void) 12 { 13 enum return_value r = func1(); 14 if(r == RIGHT) //不是r.RIGHT也不是return_value.RIGHT 15 { 16 printf("函數執行正確.\n"); 17 } 18 else 19 { 20 printf("函數執行錯誤.\n"); 21 } 22 23 return 0; 24 } 25 26 enum return_value func1(void) 27 { 28 enum return_value r1; 29 r1 = ERROR; 30 return r1; 31 }