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”变量的代码用大括号括起来,构成代码块,超出该代码块后,该变量失效;
相关文章推荐
- switch-case 中的分支中变量定义 编译不通过问题
- 关于C/C++中switch语句case中变量不能初始化赋值的问题
- Switch-case 内定义变量的问题
- C语言switch case语句中定义变量问题
- C++语法switch-case中的变量定义(很久在新浪博客的整理)
- C语言switch case语句中定义变量问题
- C语言switch case语句中定义变量问题
- switch中case中变量定义的问题
- C语言switch case语句中定义变量问题
- 解决C/C++语言中全局变量重复定义的问题
- c++中定义一个全局变量,子函数修改变量后,主函数没有改变问题
- C/C++全局变量的定义与引用问题
- 在switch-case中定义变量时当心被“穿越”
- 请教switch内部的变量定义问题?
- c++ 变量的重复定义问题 [multiple definition of] 与模板类
- C++继承时子类定义同名成员变量时的调用继承函数的问题
- 关于C语言中switch的case里定义变量解决编译报错
- C++多个头文件重复定义变量问题
- 在case语句中定义变量的问题
- C++使用模板类实现任意类型switch和变量case