转载:switch/case语句中,每个case都要加花括号

前言

多写代码,才能发现问题,即使现成的代码,手打一遍也有收获,这不遇到一个很无语的问题。

问题及原因、解决方法见以下转载内容。

原创者:ChirlChen

博客地址:https://blog.csdn.net/qqmindyourwill/article/details/52815886

转载内容

  • 问题描述: 
    平常写代码过程中常会遇到在switch-case中定义局部变量(如下面的示例中的“case ECOLOR_RED 代码1中定义的temp变量”),但是编译总是无法通过。之前看到书中提到过这个问题,但是好久没写C++,就忘了具体怎么回事,这次用到总算弄明白了。为了以后万一遗忘了方便查阅,特地记录说明。
    switch(color)
    {
    case ECOLOR_RED:
         int temp = 10;  //1: case中定义局部变量 ERROR;
         ……
         do something;
         ……
         break;
    case ECOLOR_GREEN:
        {
            int temp = 20;  //2: case中定义局部变量 RIGHT;
            ……
            do something;
            ……
        }
        break;
    case ECOLOR_BLUE:
        cout << "temp = " << temp << endl;  //3: 使用前面定义的变量, ERROR
        ……
        break;
    default:
        ……
        break;
    }   
  • 解决方案: 
    具体解决办法就像上面代码示例中的“case ECOLOR_GREEN”的做法,在case中加上“{ }”,将局部变量定义在代码块中,便能解决问题;

  • 原因:

    • 由于 switch中包含的整个代码属于同一个代码块,而不是每个case表示一个代码块。
    • 由此带来的问题就是:如果按照上面代码段中第1种情况定义的变量temp,那么同一个代码块中“case ECOLOR_BLUE”内部也就可以引用该变量(如上面代码3所示),而如果switch传进来的标记值“color == ECOLOR_BLUE”,就会导致在代码3处引用未定义的变量“temp”。VC10编译器比较友好,就会给出提示:“error C2360: “b”的初始化操作由“case”标签跳过”,提示指的就是此处所述的情况。
    • 所以上面代码1、3都是错误的,正确使用方式应该按照代码2的做法,把需要用到“temp”变量的代码用大括号括起来,构成代码块,超出该代码块后,该变量失效;

 

  • 16
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值