void f(int i) {
if (i < 10) { /* goto jump1; */ }
X x1;
jump1:
switch(i) {
case 1: X x2; break;
// case 2: X x3; break;
}
}
goto 跳過 X x1; 定義 → 變數作用域被跳過,編譯器報錯「跳過含建構函式的變數初始化」。switch 中 case 1: 後無大括號,X x2; 作用域延伸至下一 case,若啟用 case 2: 則 x3 定義位於同一作用域,導致初始化被跳過風險。goto,改用結構化控制流。switch 每個 case 用大括號限制作用域:case 1: { X x2; break; }
if (i==1) X x2;
else if (i==2) X x3; // 各自獨立作用域,合法
if-else 每分支為獨立區塊,無跨標籤跳轉問題。