goto 文 を使用すると、プログラムは、goto 文で 指定されたラベルに関連付けられたステートメントに無条件に制御を移します。
goto 文の形式は、次のとおりです。
>>-goto--label_identifier--;-----------------------------------><
goto 文は、通常の処理シーケンスを妨げる可能性があるため、これを使用すると、 プログラムの読み取りおよび保守が難しくなります。多くの場合、break ステートメント 、continue ステートメント、または関数呼び出しを使えば、goto 文を 使用しなくてもすみます。
goto 文を使用してアクティブ・ブロックを終了する場合、 そのブロックから制御が移動するときに、すべてのローカル変数は破棄されます。
goto 文を使用して、初期化を飛び越えることはできません。
goto 文は、可変長配列の
スコープ内にジャンプすることができますが、可変的に変更される型を持つオブジェクトの宣言を飛
び越えて
ジャンプすることはできません。
goto 文の例
以下の例は、ネストされたループからジャンプするために使用される goto 文を示しています。 この関数は、goto 文を使用しなくても作成することができます。
/** ** This example shows a goto statement that is used to ** jump out of a nested loop. **/ #include <stdio.h> void display(int matrix[3][3]); int main(void) { int matrix[3][3]= {1,2,3,4,5,2,8,9,10}; display(matrix); return(0); } void display(int matrix[3][3]) { int i, j; for (i = 0; i < 3; i++) for (j = 0; j < 3; j++) { if ( (matrix[i][j] < 1) || (matrix[i][j] > 6) ) goto out_of_bounds; printf("matrix[%d][%d] = %d¥n", i, j, matrix[i][j]); } return; out_of_bounds: printf("number must be 1 through 6¥n"); }
関連参照