C中使用case语句报出的一个错误
使用C或C++时,switch--case语句编译器报出这样一个错误:
首先看一下代码:
- case 4:
- int len=ListLength(L);
- printf("当前链表长度是:%d\n",len);
- break;
- case 5:
- TraveList(L);
- break;
编译器报错如下:
190 9 D:\线性表的链式表示-2.cpp [Error] jump to case label [-fpermissive]
186 9 D:\线性表的链式表示-2.cpp [Error] crosses initialization of 'int len'
crosses initialization of 'int len' 的意思是跳过了变量len的初始化,为什么会出现这样的错误呢?
原因是,我们在case 4:语句中定义了局部变量len, len的作用域直到遇到switch语句的‘}’右边的花括号才结束,
也就是说在case 5:中,变量len依然会被访问,考虑到这样,如果switch匹配了case 5:那么len的初始化就会被跳过。
同样,如果不匹配,执行default语句依然会出错。
综上:以上错误是由于case语句中的局部变量的作用域引起的。
直到了原因,就可以这样解决:
1.将case 4:后面的语句用'{}'引起来“
case 4:{
int len=ListLength(L);
printf("当前链表长度是:%d\n",len);
break;
}
case 5:
TraveList(L);
break;
2.将len放在switch的外面定义。