首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 跳轉語句與 switch 導致變數定義被跳過的編譯錯誤

     編輯:程式設計綜合問答

錯誤代碼片段


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 定義位於同一作用域,導致初始化被跳過風險。

正確寫法

  1. 避免 goto,改用結構化控制流。
  2. switch 每個 case 用大括號限制作用域:
    case 1: { X x2; break; }
  3. 或將變數定義移至函數開頭(C++17 允許宣告在任意位置,但初始化仍不可跳過)。

對比 if-else


if (i==1) X x2;
else if (i==2) X x3; // 各自獨立作用域,合法

if-else 每分支為獨立區塊,無跨標籤跳轉問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved