高质量的C代码.关于枚举类型的使用.2011.07.01
未经许可,不的转载
版权归属高雷个人
联系方式:
email:[email protected]
qq:38929568
本系列BLOG仅在以下3个地址发布
http://kome2000.blog.51cto.com/
http://38929568.qzone.qq.com/
http://blog.csdn.net/kome2000
有人认为枚举类型 enum 就是 int类型,所以很少使用enum而用int,其实enum很有用。
1.1 变量定义
enum //跟第一个定义不同的是,此处的标号DAY省略,这是允许的。 { sunday, monday, tuesday, wednesday, thursday, friday, saturday } Workday; //变量workday的类型为枚举型enum DAY
首先枚举是一组常量,那么他就有很多变量的特点,比如内存中只有1份,很方便调试代码等等,
其次他在定义时可以不必写他的值,这样对于一些不关心值的情况下就很方便了,比如一组游戏中的状态,或者连续的日期,
最后他是自然分块的代码,阅读起来很清爽!
推荐使用如下形式定义enum类型数据
typedef enum Workday { sunday, monday, tuesday, wednesday, thursday, friday, saturday } Workday;
这么做的好处是,以后使用时,用Workday就好了!
1.2 枚举型的应用
C语言中把枚举数据按整型数据处理,所以在任何×××数据可以出现的地方,都可以直接使用枚举变量,这其实会引起混乱,
我们使用枚举类型都是用来起到标识作用,或者把一个数字起一个有意义的名字,比如0的意义就是sunday,这样代码中
就可以用sunday来表示某种情况了!
所以使用枚举减少为代码而编码的情况。
在函数的参数中使用枚举类型的好处
假设我们有一个函数,如下,
work(int day) { switch( day ) { case 0: { //礼拜天要做什么事情 break; } case 1: { //礼拜一要做什么事情 break; } ... ... case 6: { //礼拜六要做什么事情 break; } default: break; } }
处理一周,每天都要做什么事情的函数,形参是用来描述哪一天的,在方法内部处理编号为0到6的情况,
像这样的函数,会有很多不利的因素,比如 形参int day 是啥意思?取值范围是什么?使用者很难知道该
传什么样的数据等,内部代码也有问题,在其他人阅读代码的时候会问0代表什么,1代表什么,为什么只有6,等
如果我们改写一下这段代码,如下
typedef enum Workday { sunday, monday, tuesday, wednesday, thursday, friday, saturday } Workday; work(Workday day) { switch( day ) { case sunday: { //礼拜天要做什么事情 break; } case monday: { //礼拜一要做什么事情 break; } ... ... case saturday: { //礼拜六要做什么事情 break; } default: break; } }
这样就一目了然了,使用者只要要传入一个Workday类型的数据,当他不知道Workday类型是什么的时候,会很快找到
typedef enum Workday{...};这段代码,然后就知道要传入的数据仅限
sunday, monday, tuesday, wednesday, thursday, friday, saturday
switch( day ) { case 0: { //礼拜天要做什么事情 break; } case 1: { //礼拜一要做什么事情 break; } ... ... case 6: { //礼拜六要做什么事情 break; } default: break; }