枚举类型 和 if switch case

枚举类型定义出枚举的第一项和最后一项 做为循环边界

把枚举的第一个元素留作非法值。

enum Country

{

  Country_InvalidFirst = 0;

  ...

  Country_Last

};

 

if 里放正常情况 else里放出错 少见情况

 

switch部分被分配了一个连续的查找 表,switch case中不连续的部分也被添加上了相应的条目,switch表的大小不是根据case语 句的多少,而是case的最大值的最小值之间的间距。在选择相应 的分支时,会先有一个cmp子句,如果大于查找表的最大值,则跳转到default子句。而其他所有的case语句的耗时都回事O(1)。

相比于if-else结构,switch的 效率绝对是要高很多的,但是switch使用查找表的方式决定了case的条件必须是一个连续的常量。而if-else则可以灵活的多。

 

1.   当   case   语句少的时候,C编译器将其转成   if..else..   类型进行处理,运用较多的  
      cmp   与   jmp   语句   ,而当   case   语句较多的时候,C编译器会出成一个跳转表,而直  
      接通过跳转表进行跳转,这让   switch   具有非常高的效律,而且效律几乎不会因为  
      case   语句的增长而减小,李维所担忧的问题是完全不会发生的  
2.   可以问答下面几个问题:  
      1.   为什么   case   语句中需要的是整数类型而不能是其余的类型?  
            这是因为,case   语句中的这个值是用来做跳转表的下标的,因此,当然必须是整数  
      2.   为什么   case   语句在不加break的时候具有直通性?  
            这是因为跳转是在进入   switch   是计算出的,而不是在case语句中计算出的,整个  
            case   语句群就是一块完整而连续的代码,只是switch让其从不同的位置开始执行。  

zz from http://topic.csdn.net/u/20070410/11/3341e77a-5b85-4f0c-b6a0-522fb899dc44.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值