一个小程序重新透视C语言Switch语句

最近看berkerly DB的源代码,在hash函数的hash4中一段代码让我很困惑,将其简化如下:
/*ctest.c*/
void testSwitch(int sw){
    int  loop = 3;

    switch(sw){
    case 0:
        do{
        printf("case 0:%d/n",loop);
        case 7:
        printf("case 7:%d/n",loop);
        case 6:
        printf("case 6:%d/n",loop);
        case 5:
        printf("case 5:%d/n",loop);
        case 4:
        printf("case 4:%d/n",loop);
        case 3:
        printf("case 3:%d/n",loop);
        case 2:
        printf("case 2:%d/n",loop);
        case 1:
        printf("case 1:%d/n",loop);
        }while(--loop);
    }
}

int main()
{
    testSwitch(4);

    return 0;
}

程序的输出为
case 4:3
case 3:3
case 2:3
case 1:3
case 0:2
case 7:2
case 6:2
case 5:2
case 4:2
case 3:2
case 2:2
case 1:2
case 0:1
case 7:1
case 6:1
case 5:1
case 4:1
case 3:1
case 2:1
case 1:1
这表明switch语句确实就是使用了goto跳转,所以可以将case植入到其它语句中,如本例中的while语句;case本身就是一个标签;
分析完这段代码,我翻看了以前搞到手的C puzzles,发现其中已经收录了这一puzzle,以前嫌麻烦,懒的看,需要用时才发现。学习源代码!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值