轉載自 https://blog.csdn.net/zhh464626057/article/details/41038933
什么時候需要用到enum呢?就是變量的數值在幾個范圍之間。
red,blue,black.這樣用enum比較好.當然也可以用define.但是define維護起來比較麻煩. #define 適合比較少的變量的時候.
在上例中,OUT_OF_MEMORY等枚舉常量依次被編譯程序自動賦值為0,1,2和3。 同樣,你也可以用#define指令說明類似的一組常量,請看下例:
上述兩例的結果是相同的。假設你要增加兩個新的常量,例如DRIVE_NOT_READY和CORRUPT_FILE。如果常量原來是用enum關鍵字說明的,你可以在原來的常量中的任意一個位置插入這兩個常量,因為編譯程序會自動賦給每一個枚舉常量一個唯一的值;如果常量原來是用#define指令說明的,你就不得不手工為新的常量賦值。在上面的例子中,你並不關心常量的實際值,而只關心常量的值是否唯一,因此,用enum關鍵字說明常量使程序更容易維護,並且能防止給不同的常量賦予相同的值。
red,blue,black.這樣用enum比較好.當然也可以用define.但是define維護起來比較麻煩. #define 適合比較少的變量的時候.
與用#define指令說明常量(即說明標識符常量)相比,用enum關鍵字說明常量(即說明枚舉常量)有以下幾點好處:
1、使程序更容易維護,因為枚舉常量是由編譯程序自動生成的,而標識符常量必須由程序員手工賦值。例如,你可以定義一組枚舉常量,作為程序中可能發生的錯誤的錯誤號,請看下例:
- enum Error_Code{
- OUT_OF_MEMORY,
- INSUFFICIENT_DISK_SPACE,
- LOGIC_ERROR,
- FILE_NOT_FOUND
- }
在上例中,OUT_OF_MEMORY等枚舉常量依次被編譯程序自動賦值為0,1,2和3。 同樣,你也可以用#define指令說明類似的一組常量,請看下例:
- #define OUT_OF_MEMORY 0
- #define INSUFFICIENT_DISK_SPACE 1
- #define LOGIC_ERROR 2
- #define FILE_NOT_FOUND 3
上述兩例的結果是相同的。假設你要增加兩個新的常量,例如DRIVE_NOT_READY和CORRUPT_FILE。如果常量原來是用enum關鍵字說明的,你可以在原來的常量中的任意一個位置插入這兩個常量,因為編譯程序會自動賦給每一個枚舉常量一個唯一的值;如果常量原來是用#define指令說明的,你就不得不手工為新的常量賦值。在上面的例子中,你並不關心常量的實際值,而只關心常量的值是否唯一,因此,用enum關鍵字說明常量使程序更容易維護,並且能防止給不同的常量賦予相同的值。
2、使程序調試起來更方便,因為某些標識符調試程序能打印枚舉常量的值。這一點在調試程序時是非常用的,因為如果你的程序在使用枚舉常量的一行語句中停住了,你就能馬上檢查出這個常量的值;反之,絕大多數調試程序無法打印標識符常量的值,因此你不得不在頭文件中手工檢查該常量的值。
3、枚舉和define都可以swtich,枚舉是類型安全的 define不是類型安全的,枚舉只能定義整形值,define能定義幾乎任何值
- enum NodeType {AND, OR};
- void main() {
- NodeType type;
- switch(type)
- {
- case AND:break;
- case OR:break;
- }
- return 0;
- }
4、宏和枚舉之間的差別主要在作用的時期和存儲的形式不同,宏是在預處理的階段進行替換工作的,它替換代碼段的文本,程序運行的過程中宏已不存在了。而枚舉是在程序運行之后才起作用的,枚舉常量存儲在數據段的靜態存儲區里。宏占用代碼段的空間,而枚舉除了占用空間,還消耗CPU資源。
但也不能就此說宏比枚舉好,如果需要定義非常多的常量,用一條enum {.....}明顯比一大堆define更清晰。