C中使用case語句報出的一個錯誤
阿新 • • 發佈:2018-11-28
C中使用case語句報出的一個錯誤
原創 2016年02月23日 14:04:49使用C或C++時,switch--case語句編譯器報出這樣一個錯誤:
首先看一下程式碼:
[cpp] view plain copy- 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的外面定義。