error: jump to case label 或者 error: crosses initialization of 編譯錯誤
代碼:
int main()
{
int a =0;
switch(a)
{
case 0: int b = 0;break;
case 1: break;
default:break;
}
return 0;
}
編譯器提示錯誤:
testswitch.cpp: In function ‘int main()’:
testswitch.cpp:9: error: jump to case label
testswitch.cpp:8: H‘int b’
testswitch.cpp:10: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’
出現這樣的提示,你很有可能在某個case標記中定義了局部變量,而後面還有其他的case標記或者default語句。。比如說這裏的整形變量b。
看看編譯器提示的信息 cross initialization of int b, 什麼意思呢, 就是說跳過了變量的初始化,仔細想想,確實是這樣,我們在case 0 中定義了變量b,在這個程序中,直到遇到switch的“}”右花括號,b的作用域才終結,也就是說 在case 1 和 default 分支中 變量b依然是可以訪問的。考慮這樣一種情況,如果switch匹配了case 1,這樣case 0的代碼被跳過了,那麼b就沒有定義,如果此時在case 1的代碼中訪問了b,程序會崩潰的。如果誰也不匹配,執行default也會有同樣的危險。
知道了錯誤的原因,解決起來就很簡單了
1,將case 0 標記 的代碼用 {}括起來,這樣b的作用域在這個花括號內。在其他的case 標記中不能訪問。
2. 將 變量b放在 switch外面 定義。
int main()
{
int a =0;
switch(a)
{
case 0: int b = 0;break;
case 1: break;
default:break;
}
return 0;
}
編譯器提示錯誤:
testswitch.cpp: In function ‘int main()’:
testswitch.cpp:9: error: jump to case label
testswitch.cpp:8: H‘int b’
testswitch.cpp:10: error: jump to case label
testswitch.cpp:8: error: crosses initialization of ‘int b’
出現這樣的提示,你很有可能在某個case標記中定義了局部變量,而後面還有其他的case標記或者default語句。。比如說這裏的整形變量b。
看看編譯器提示的信息 cross initialization of int b, 什麼意思呢, 就是說跳過了變量的初始化,仔細想想,確實是這樣,我們在case 0 中定義了變量b,在這個程序中,直到遇到switch的“}”右花括號,b的作用域才終結,也就是說 在case 1 和 default 分支中 變量b依然是可以訪問的。考慮這樣一種情況,如果switch匹配了case 1,這樣case 0的代碼被跳過了,那麼b就沒有定義,如果此時在case 1的代碼中訪問了b,程序會崩潰的。如果誰也不匹配,執行default也會有同樣的危險。
知道了錯誤的原因,解決起來就很簡單了
1,將case 0 標記 的代碼用 {}括起來,這樣b的作用域在這個花括號內。在其他的case 標記中不能訪問。
2. 將 變量b放在 switch外面 定義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.