高质量的C代码.关于枚举类型的使用.2011.07.01
未经许可,不的转载
版权归属高雷个人
联系方式:
email:gaolei57521@gamil.com
qq:38929568
有人认为枚举类型 enum 就是 int类型,所以很少使用enum而用int,其实enum很有用。
1.1 变量定义
首先枚举是一组常量,那么他就有很多变量的特点,比如内存中只有1份,很方便调试代码等等,
其次他在定义时可以不必写他的值,这样对于一些不关心值的情况下就很方便了,比如一组游戏中的状态,或者连续的日期,
最后他是自然分块的代码,阅读起来很清爽!
推荐使用如下形式定义enum类型数据
这么做的好处是,以后使用时,用Workday就好了!
1.2 枚举型的应用
C语言中把枚举数据按整型数据处理,所以在任何整形数据可以出现的地方,都可以直接使用枚举变量,这其实会引起混乱,
我们使用枚举类型都是用来起到标识作用,或者把一个数字起一个有意义的名字,比如0的意义就是sunday,这样代码中
就可以用sunday来表示某种情况了!
所以使用枚举减少为代码而编码的情况。
在函数的参数中使用枚举类型的好处
假设我们有一个函数,如下,
处理一周,每天都要做什么事情的函数,形参是用来描述哪一天的,在方法内部处理编号为0到6的情况,
像这样的函数,会有很多不利的因素,比如 形参int day 是啥意思?取值范围是什么?使用者很难知道该
传什么样的数据等,内部代码也有问题,在其他人阅读代码的时候会问0代表什么,1代表什么,为什么只有6,等
如果我们改写一下这段代码,如下
这样就一目了然了,使用者只要要传入一个Workday类型的数据,当他不知道Workday类型是什么的时候,会很快找到
typedef enum Workday{...};这段代码,然后就知道要传入的数据仅限
sunday, monday, tuesday, wednesday, thursday, friday, saturday
这7个,如果有另外的人员看这段代码的时候也很容明白代码的意思,假设我们代码中少写了礼拜四这一天的处理,
会很快被发现,如果用4表示礼拜四的话,阅读代码的人就很难发现或者根本不知道case 4:的这种情况应该有,还是不应该有!
根据IDE的不同,函数work(Workday day)的实参的检查是不同的,比如我用的VC6.0 的时候
work(-1); work(123);都是允许的,而work( Workday.monday );却提示失败
只能用 work( monday );
听说VS2010就必须使用work( Workday.monday );这种形式,当然这是最理想的,因为他防止了实参的错误,也给阅读代码,
或者代码检查带来了极大的便利,
虽然我的VC6做不到这点,但起码在使用函数的时候我是知道要传入Workday类型的值了!
这样就可以减少我在写代码的时候出错的几率了!
PS: 为代码而编码
比如要做一周的事情安排
这段代码就是用0来表示礼拜天,也就为礼拜天而编了个码,这个码就是0