C語言中enum關鍵字的實現(xiàn)示例
在 C 語言中,有一種基本數(shù)據(jù)類型叫做枚舉類型,它用于定義一組具有離散值的常量,可以讓數(shù)據(jù)更簡潔,更易讀。枚舉類型通常用于為程序中的一組相關的常量取名字,以便于程序的可讀性和維護性。本文將介紹 C 語言中的 enum 關鍵字,它是用來定義枚舉類型的。
定義枚舉類型
要定義一個枚舉類型,需要使用 enum 關鍵字,后面跟著枚舉類型的名稱,以及用大括號 {} 括起來的一組枚舉常量。每個枚舉常量可以用一個標識符來表示,也可以為它們指定一個整數(shù)值,如果沒有指定,那么默認從 0 開始遞增。枚舉語法定義格式為:
enum 枚舉名 { 枚舉元素1, 枚舉元素2, ... };
例如,我們可以定義一個表示一周七天的枚舉類型,如下:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
這里,我們?yōu)榈谝粋€枚舉元素 MON 指定了值為 1,那么后面的枚舉元素的值就依次遞增,即 TUE 為 2,WED 為 3,依此類推。如果我們不指定任何枚舉元素的值,那么默認從 0 開始,即 MON 為 0,TUE 為 1,等等。
我們也可以在定義枚舉類型時改變枚舉元素的值,例如:
enum SEASON { SPRING, SUMMER=3, AUTUMN, WINTER };
這里,我們?yōu)?SUMMER 指定了值為 3,那么后面的枚舉元素的值就在前一個元素的基礎上加 1,即 AUTUMN 為 4,WINTER 為 5。注意,前面的枚舉元素 SPRING 的值仍然是默認的 0。
定義枚舉變量
定義了枚舉類型后,我們就可以用它來定義枚舉變量,用來存儲枚舉類型的值。我們可以通過以下三種方式來定義枚舉變量:
先定義枚舉類型,再定義枚舉變量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day;
定義枚舉類型的同時定義枚舉變量
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
省略枚舉名稱,直接定義枚舉變量
enum { MON=1, TUE, WED, THU, FRI, SAT, SUN } day;
注意,同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的枚舉元素。例如,以下兩種聲明都是錯誤的:
// 錯誤聲明一:存在同名的枚舉類型 enum WEEKDAY { MON, TUE, WED, THU, FRI }; enum WEEKDAY { SAT, SUN }; // 錯誤聲明二:存在同名的枚舉元素 enum WEEKDAY { MON, TUE, WED, THU, FRI }; enum WEEKEND { SAT, SUN, MON };
使用枚舉類型的變量
定義了枚舉變量后,我們就可以對它進行賦值和使用了。有以下幾點需要注意:
對枚舉變量賦值時,可以直接使用枚舉元素的標識符,也可以使用整數(shù)值,但是需要進行類型轉(zhuǎn)換。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; day = WED; // 直接使用枚舉元素 day = (enum DAY) 3; // 使用整數(shù)值,需要類型轉(zhuǎn)換
使用枚舉變量時,可以將它作為整數(shù)值來處理,也可以用它來進行條件判斷或 switch 語句。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; day = WED; printf("%d\n", day); // 輸出 3 if (day == WED) { printf("Today is Wednesday\n"); // 輸出 Today is Wednesday } switch (day) { case MON: printf("Monday\n"); break; case TUE: printf("Tuesday\n"); break; case WED: printf("Wednesday\n"); break; case THU: printf("Thursday\n"); break; case FRI: printf("Friday\n"); break; case SAT: printf("Saturday\n"); break; case SUN: printf("Sunday\n"); break; default: printf("Invalid day\n"); }
在 C 語言中,枚舉類型是被當做 int 或者 unsigned int 類型來處理的,所以按照 C 語言規(guī)范是沒有辦法遍歷枚舉類型的。不過在一些特殊的情況下,枚舉類型必須連續(xù)是可以實現(xiàn)有條件的遍歷。例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; // 遍歷枚舉元素 for (day = MON; day <= SUN; day++) { printf("枚舉元素:%d\n", day); }
枚舉類型的大小
在 C 語言中,枚舉類型的大小是由編譯器決定的,一般來說,它是按照 int 型或者 unsigned int 型來存儲的,所以它的大小通常是 4 個字節(jié)。我們可以用 sizeof 運算符來查看枚舉類型的大小,例如:
enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN }; enum DAY day; printf("sizeof enum DAY: %d\n", sizeof(enum DAY)); // 輸出 4 printf("sizeof day: %d\n", sizeof(day)); // 輸出 4
枚舉類型和 #define 宏的區(qū)別
最后,我們來看看枚舉類型和 #define 宏的區(qū)別,它們都可以用來定義一組常量,但是有以下幾點不同:
- #define 宏常量是在預編譯階段進行簡單替換,枚舉常量則是在編譯的時候確定其值。
- 一般在編譯器里,可以調(diào)試枚舉常量,但是不能調(diào)試宏常量。
- 枚舉可以一次定義大量相關的常量,而 #define 宏一次只能定義一個。
總之,枚舉類型是 C 語言中的一種有用的數(shù)據(jù)類型,它可以讓我們的程序更加清晰和規(guī)范,也可以避免一些魔法數(shù)字的出現(xiàn)。
到此這篇關于C語言中enum關鍵字的實現(xiàn)示例的文章就介紹到這了,更多相關C語言 enum關鍵字內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Qt編寫地圖實現(xiàn)動態(tài)點位標注的示例代碼
動態(tài)點位標注是定制的一個功能模塊,提供直接地圖上選點設置標記點,點位信息用結(jié)構(gòu)體存儲,其中包括了經(jīng)度、緯度、速度、時間等信息。本文將介紹實現(xiàn)這一功能的示例代碼,需要的可以參考一下2022-01-01C++ vector在多線程操作中出現(xiàn)內(nèi)存錯誤問題及解決
這篇文章主要介紹了C++ vector在多線程操作中出現(xiàn)內(nèi)存錯誤問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-08-08