C++ 速查手冊

5.9 - goto 陳述

關鍵字 goto 用於控制程式執行的順序,使程式直接跳到指定標籤 (lable) 的地方繼續執行。

形式如下

標籤可以是任意的識別字,後面接一個冒號。

舉例如下

#include <iostream>
  
int main() {
    goto label_one;
    
    label_one: 
    {
        std::cout << "Label One" << std::endl;
        goto label_two;
    }
    
    label_two:
    {
        std::cout << "Label Two" << std::endl;
        goto label_three;
    }
    
    label_three:
    {
        std::cout << "Label Three" << std::endl;
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0509_1.cpp
   功能:示範 C++ 的 goto 陳述
   作者:張凱慶*/

編譯後執行,結果如下

$ g++ u0509_1.cpp
$ ./a.out
Label One
Label Two
Label Three
$

此例按標籤的順序,在每個標籤下方都用大括弧圍住一個程式區塊, goto 到了指定標籤,就會執行標籤下方的程式區塊

label_one: 
{
    std::cout << "Label One" << std::endl;
    goto label_two;
}

概念滿簡單的,上面利用標籤順序執行,下面我們另舉一個例子,使 goto 具有迴圈的效果

#include <iostream>
  
int main() {
    int i = 1;
    if (i < 10) {
        goto label_one;
    }
    
    label_one:
    {
        std::cout << "Label One" << std::endl;
        goto label_three;
    }
    
    label_two:
    {
        std::cout << "Label Two" << std::endl;
    }
    
    label_three:
    {
        std::cout << "Label Three" << std::endl;
        i++;
        if (i < 10) {
            goto label_two;
        }
    }
    
    return 0;
}

/* 《程式語言教學誌》的範例程式
   https://kaiching.org/
   檔名:u0509_2.cpp
   功能:示範 C++ 的 goto 陳述
   作者:張凱慶*/

編譯後執行,結果如下

$ g++ u0509_2.cpp
$ ./a.out
Label One
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
Label Two
Label Three
$

上一頁 5.8 - continue 陳述
回 C++ 速查手冊首頁
下一頁 單元 6 - 例外處理
回 C++ 教材
回程式語言教材首頁