1. 程式人生 > >C中使用case語句報出的一個錯誤

C中使用case語句報出的一個錯誤

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的外面定義。