您的位置:首页 > 编程语言 > C语言/C++

C++:在switch的case中定义变量的问题

2016-10-14 14:49 736 查看

C++:在switch的case中定义变量的问题

问题描述:

平常写代码过程中常会遇到在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”变量的代码用大括号括起来,构成代码块,超出该代码块后,该变量失效;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ c语言 switch