天天看点

高质量的C代码.关于枚举类型的使用.2011.07.01

高质量的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;  }      

继续阅读