使用Switch時出現error: jump to case label

2020-08-09 10:17:34

情形1:不允許執行

switch (a)
{
    case 1:
        int a = 0;
        //stuff
        break;

    case 2:
        //stuff
        break;
}

情形2:允許執行

switch (a)
{
    case 1:
        {
            int a = 0;
            //stuff
        }
        break;

    case 2:
        //stuff
        break;
}
在使用switch的過程中,出現error: jump to case label,這往往是因爲不注意作用域造成的。

C/C++約定,在塊語句中,物件的作用域從物件的宣告語句開始直到塊語句的結束,也就是說default標號後的語句是可以使用物件a的。如果程式執行時從switch處跳到default處,就會導致物件a沒有被正確地初始化。確保物件的初始化可是C++的重要設計哲學,所以編譯器會很嚴格地檢查這種違例情況,像上述的範例程式碼中default語句後面並沒有使用a,但考慮到以後程式碼的改動可能無意中使用,所以一樣被封殺。

轉:https://blog.csdn.net/yang_lang/article/details/6713403
建議看此篇 很詳細