Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C/C++のgoto文とは?構文と使い方を実例付きで解説

goto文はC/C++におけるジャンプ文の一種で、同じ関数内のある文から別の文へ処理を直接移動させるために使用します。ただし、goto文の使用は強く非推奨とされています。その理由は、プログラムの構造が複雑になり、制御の流れを追跡しにくくなるだけでなく、後の修正や保守も困難になるためです。

goto文の構文

C言語におけるgoto文の基本構文は以下の通りです。

goto label;
.
.
.
label: statement;

「label」には任意のラベル名を指定します。ジャンプ先となる文の前に「label:」という形式でラベルを記述しておくことで、goto文が実行された時点でその位置へ処理が移動します。

goto文の使用例

以下は、C言語でgoto文を使用したサンプルプログラムです。

#include <stdio.h>
int main () {
    int a = 10;
    LOOP:do {  
        if( a == 12) {
            a = a + 1;
            goto LOOP;
        }
        printf("Value of a: %d\n", a);
        a++;
    }while( a < 15 );
    return 0;
}

実行結果

Value of a: 10
Value of a: 11
Value of a: 13
Value of a: 14

プログラムの解説

このプログラムでは、変数aの値が12になった時点で、aに1を加算してから「LOOP」ラベルへジャンプし、do-whileループを再度実行しています。そのため、aが12の場合のprintfによる出力はスキップされ、結果として10、11、13、14の4つの値のみが出力されます。

goto文を使う際の注意点

goto文を乱用すると、処理の流れが複雑に入り組んだ「スパゲッティコード」と呼ばれる読みにくいプログラムになりがちです。現代のプログラミングでは、break文やcontinue文、関数への分割など、より構造化された代替手段を使うことが推奨されています。goto文の使用は、エラー処理など本当に必要な場面に限定しましょう。

  1. C/C++プログラミングにおけるcontinue文の使い方を解説

    このチュートリアルでは、C/C++におけるcontinue文の動作について詳しく解説します。 continue文はループ制御文の一つです。break文がループ自体を終了させるのに対し、continue文は現在の反復処理における残りのステートメントをスキップし、次の反復(イテレーション)へ処理を強制的に移す働きを持っています。 continue文とbreak文の違い break文:ループ全体を終了し、ループの外へ抜けます。 continue文:現在の回だけをスキップし、ループ処理は継続されます。 また、continue文の後の処理の流れは、ループの種類によって少し異なります。 for文の

  2. C/C++で学ぶAA木(AA Tree)とは?基本概念と平衡化操作を徹底解説

    AA木(AA Tree)とはコンピュータサイエンスにおいて、AA木(AA Tree)とは、順序付きデータを効率的に格納・検索するために実装された平衡木(バランスドツリー)の一種です。AA木は、赤黒木(Red-Black Tree)の変種として扱われます。赤黒木は二分探索木の一形態であり、要素の追加や削除を効率的にサポートします。赤黒木と大きく異なる点は、AA木では赤いノードを右の子としてのみ追加でき、左の子としては配置できないという制約があることです。この制約により、2-3-4木ではなく2-3木をシミュレートすることになり、その結果、木の保守操作が大幅に簡素化されます。赤黒木の平衡化アルゴリズ