回覆列表
-
1 # fffsa3429
-
2 # 使用者129537379732
只有很小的區別。 C 標準中允許列舉和其它整形類別自由混用而不會出錯。(但是, 假如編譯器不允許在未經明確型別轉換的情況下混用這些型別,則聰明地使用列舉可以捕捉到某些程式錯誤。) 列舉的一些優點: 自動賦值; 偵錯程式在檢驗列舉變數時, 可以顯示符號值; 它們服從資料塊作用域規則。(編譯器也可以對在列舉變數被任意地和其它型別混用時, 產生非重要的警告資訊, 因為這被認為是壞風格。)一個缺點是程式設計師不能控制這些對非重要的警告; 有些程式設計師則反感於無法控制列舉變數的大小。
兩者只有恨小的區別,在C語言中,列舉為整型,列舉常量為int型,因此它們都可以和其他整型類別混用而不會出錯,而且列舉優點眾多;能自動賦值;偵錯程式在檢驗列舉變數時,可以顯示符號值;服從資料塊作用域規則。具體而言,兩者的區別表現在以下幾個方面:(1)列舉常量是實體中的一種,而宏定義不是實體。(2)列舉常量屬於常量,但宏定義不是常量。(3)列舉量具有型別,但宏沒有型別,列舉變數具有與普通變數相同的性質,如作用域,值等,但是宏沒有。(4)#define宏常量是在預編譯階段進行簡單替換,列舉常量則是在編譯的時候確定其值。(5)一般在編譯器裡,可以除錯列舉常量,但是不能除錯宏常量。(6)列舉可以一次定義大量相關的常量,而#define宏一次只能定義一個。