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外面 定義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章