在case中加上{}括起来,限定一下作用域。
E.g:
switch(){
case: xxx{
break;
}
}
知乎讨论:https://www.zhihu.com/question/23051685
1)不能跳过的不是变量的定义,而是初始化。把int ival改成int ival=0;则不会编译通过;
2) ival是局部变量,作用域是所在的大括号内, 第二个case仍然属于该变量的作用域。另外,变量的定义不是语句,所以无需执行也是全范围有效。这里第一个case的语句虽然没有被执行,但它的变量定义仍然有效。
"最后补充一下,你的声明还可以是一个类的对象,那么这时候这个声明的语句就很可能是一个命令了:调用相应的构造函数。这种情况下,编译器就会告诉你跳过了该做的事情,不能这么写了"
3) 其实这就是变量作用域的问题。变量自定义起在其作用域里始终有效。而除了全局性的外部变量,以及文件域的静态变量,其他的都是语句块限定的,即花括号{}里有效。
4)
Related:
https://www.cnblogs.com/zhebin/archive/2013/05/19/3055308.html