c語言枚舉類型
什么是枚舉呢?打個比方,比如我們一個星期有七天,從周一到周日這是固定不變的,不可能無端端的跳出一個星期八出來,在這種固定的情況下,我們?nèi)绻獙懸粋€程序去固定這七天,并且不讓別人亂修改,為了滿足這個需求,枚舉就誕生了。
所謂枚舉,是指將變量的值一一列舉出來,變量只限于列舉出來的值的范圍內(nèi)取值。
enum weekday{sun,mon,tue,wed,thu,fri,sat};
enum weekday day
- sun,mon被稱為枚舉元素或枚舉常量,他們是用戶定義的標識符
- 枚舉元素不是變量而是常量,因此枚舉元素又稱為枚舉常量。因為是常量,所以不能對枚舉元素進行賦值
- 枚舉元素作為常量,它們是有值的,c語言在編譯時按定義的順序使它們的值為0,1,2,比如day=tue;那么day的變量值則為2
- 如果在定義枚舉類型時指定元素的值,也可以改變枚舉元素的值,例如:enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat};這時sun就為7了
- 枚舉型是一個集合,集合中的元素是一些命名的整型常量
- 枚舉類型是預(yù)處理指令#define的替代
- 類型定義以分號;結(jié)束
- 同一個程序中不能定義同名的枚舉類型,不同的枚舉類型中也不能存在同名的命名元素
DB_RegisterName這是一個我在看調(diào)試代碼的枚舉類型,里面有很多枚舉元素,并都自己指定了值,簡化后類似如下:
typedef enum T_DB_RegisterName
{
GPR0 = 0,
GPR1 = 1,
GPR2 = 2,
GPR_SUM = 3,
FGPR0 = 0,
FGPR1 = 1,
FGPR_SUM = 2,
PCR = 0,
MSR = 1,
CR = 2,
LR = 3,
SPR_SUM = 4,
REGISTER_SUM = GPR_SUM + FGPR_SUM + SPR_SUM,
SP = GPR1,
PC = GPR_SUM + FGPR_SUM*2 + PCR
}DB_RegisterName;
我們可以看到,這些枚舉元素都自己指定了值,并沒有用默認值,其次還有很多元素用了相同的值,比如GPR0和FGPR0的值都為0,那么他們兩個應(yīng)該是具有相同的意義!
后來又想了想,想起了一句話:枚舉類型是預(yù)處理指令#define的替代,也就是我們不過是同時#define GPR0 = 0;以及#define FGPR0 = 0;其實也就是便于代碼的可讀性而已,而不是簡簡單單的數(shù)字讓人摸不著頭腦。
枚舉類型我之前大學(xué)也學(xué)過,卻往往一知半解,最近調(diào)試ppc又剛好碰見了,順手記之。