C语言关键字浅析-enum
### C語(yǔ)言關(guān)鍵字淺析系列 ###
### ISO/ANSI C 關(guān)鍵字 ###
enum關(guān)鍵字的原型是enumerated type,意思是枚舉類(lèi)型
這是ISO/ANSI C90標(biāo)準(zhǔn)新增的關(guān)鍵字之一(const、enum、signed、void、volatile)
?
enum的作用是:
聲明代表整數(shù)常量的符號(hào)名稱(chēng)。
?
1、枚舉是什么意思
枚舉有列舉的意思,本意是一個(gè)一個(gè)列舉出來(lái),更準(zhǔn)確一點(diǎn)應(yīng)該是列出有窮序列集的所有成員
生活中的枚舉例子很多,如一年的十二個(gè)月:January,February,……,November,December
一周7天:Monday,Tuesday,……,Sunday
簡(jiǎn)化的七彩彩虹顏色:紅,橙,黃,綠,藍(lán),靛,紫
?
2、枚舉類(lèi)型(enumeration type)
枚舉類(lèi)型的一個(gè)作用是提高程序的可讀性,從語(yǔ)法上看,如果你已經(jīng)學(xué)過(guò)了C語(yǔ)言中的“結(jié)構(gòu)(struct)”的概念
你會(huì)發(fā)現(xiàn)他們的語(yǔ)法格式是差不多的:
struct student{ /* 這是一個(gè)結(jié)構(gòu) */char[30] name;int age; };enum Taiji{ /* 這是一個(gè)枚舉 */Ying,Yang };struct student stu; /* 定義結(jié)構(gòu)的變量 */ enum Taiji tj; /* 定義枚舉的變量 */如何使用枚舉類(lèi)型的變量呢?
enum monthes{January,February,Match,April,May,June,July,August,September,October,November,December }; enum monthes mon;/* 某個(gè)函數(shù) */ void fun() {mon = February; /* 可以在其取值范圍內(nèi)賦值 */if (mon == August) /* 可以在邏輯表達(dá)式中直白地這樣寫(xiě) */{// Operation_1}for(mon = February;mon <= September;mon++) /* 可以寫(xiě)進(jìn)循環(huán)條件判斷 */{// Operation_2}/*注:該式中的mon++表達(dá)式,這樣的格式在C中是支持的,但在C++中不允許,即C語(yǔ)言支持對(duì)枚舉變量使用自增運(yùn)算符,而C++不允許,如果程序存在兩種語(yǔ)言的交叉,可以將mon聲明為int類(lèi)型,即可兼容C/C++*/ }3、枚舉類(lèi)型的本質(zhì)和enum常量
技術(shù)上看,上述的January等枚舉值并不是以字符形式存儲(chǔ),而是一個(gè)個(gè)int類(lèi)型的整數(shù)常量,
如果我們把January按%d輸出,可以看到打印出一個(gè)0。
這樣的結(jié)構(gòu)允許枚舉常量用在switch結(jié)構(gòu)中,因?yàn)樗举|(zhì)是int。
如果沒(méi)有額外規(guī)定,枚舉列表的常量會(huì)按照默認(rèn)的數(shù)序指定,即從第一個(gè)枚舉項(xiàng)開(kāi)始分別為0,1,2……
當(dāng)然在定義時(shí)我們也可以自己做出一點(diǎn)規(guī)定:
enum monthes{ /* 如果我們希望枚舉的月份和表示它的值是一致的 */January = 1,February = 2,Match = 3,April = 4,…… };enum humi{ /* 濕度默認(rèn)等級(jí) */dry = 10, normal = 45, wet = 80 };如果存在某些枚舉項(xiàng)沒(méi)有自定義賦值呢?
enum humi{broken, /* 首個(gè)枚舉默認(rèn)值為0 */veryDry = 9, Dry, littleDry, /* 此時(shí)后兩項(xiàng)沒(méi)有指定,但系統(tǒng)會(huì)從9開(kāi)始往后繼續(xù)指定,即10,11…… */belowNormal = 44, Normal, aboveNormal, /* 同理,此處三項(xiàng)為44,45,46 */littleWet = 79, Wet, veryWet /* 每個(gè)自定義的指定值可以看做枚舉指定的“新起點(diǎn)”, 如果沒(méi)有指定則自動(dòng)按序指定 */ };枚舉配合case在switch結(jié)構(gòu)中能很好地提高程序可讀性:
enum weekdays{Mon, Tues, Wed, Thur, Fri, Sat, Sun }; …… void fun() {enum weekdays week;……switch (week){case Mon: printf("It's Monday");case Tues: printf("It's Tuesday");case Wed: printf("It's Wednesday");case Thur: printf("It's Thursday");case Fri: printf("It's Friday");case Sat: printf("It's Saturday");case Sun: printf("It's Sunday");default: printf("What a bug...");}…… }?
——參考《C Primer Plus第五版》
?
相關(guān)文章:
C語(yǔ)言關(guān)鍵字淺析-struct
?
總結(jié)
以上是生活随笔為你收集整理的C语言关键字浅析-enum的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 如何用计算机环境设计,计算机绘图软件在环
- 下一篇: 了解套壳子