C语言中switch语句报错问题

本文探讨了在C或C++中使用switch-case语句时出现的一个常见错误:编译器报告跨越变量初始化的问题。文章通过具体示例解释了错误产生的原因,并提供了两种解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C中使用case语句报出的一个错误

原创  2016年02月23日 14:04:49
  • 314

使用C或C++时,switch--case语句编译器报出这样一个错误:

首先看一下代码:

[cpp]  view plain  copy
  1. case 4:  
  2.     int len=ListLength(L);  
  3.     printf("当前链表长度是:%d\n",len);  
  4. break;  
  5. case 5:  
  6.     TraveList(L);  
  7. 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的外面定义。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值