gotoを使うと、指定したラベルの位置まで飛ぶことが出来る。
BASICの名残であり、現代では使ってはいけないとはよく言われる。
/* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ /* main関数 */ int main(void){ /* 変数の宣言 */ int i; /* ループ変数i */ int j; /* ループ変数j */ /* 二重ループ */ for (j = 0; j < 5; j++){ /* jが5ならこのループは終了. */ for (i = 0; i < 5; i++){ /* iが5ならこのループは終了. */ /* iとjの出力. */ printf("i = %d, ", i); /* iを出力, */ printf("j = %d\n", j); /* jを出力. */ } } /* プログラムの終了 */ return 0; /* 0を返して正常終了. */ }
こういう二重ループを実行すると、
$ vi goto.c $ gcc goto.c -o goto $ ./goto i = 0, j = 0 i = 1, j = 0 i = 2, j = 0 i = 3, j = 0 i = 4, j = 0 i = 0, j = 1 i = 1, j = 1 i = 2, j = 1 i = 3, j = 1 i = 4, j = 1 i = 0, j = 2 i = 1, j = 2 i = 2, j = 2 i = 3, j = 2 i = 4, j = 2 i = 0, j = 3 i = 1, j = 3 i = 2, j = 3 i = 3, j = 3 i = 4, j = 3 i = 0, j = 4 i = 1, j = 4 i = 2, j = 4 i = 3, j = 4 i = 4, j = 4 $
このように最後まで出力される。
/* ヘッダファイルのインクルード */ #include <stdio.h> /* 標準入出力 */ /* main関数 */ int main(void){ /* 変数の宣言 */ int i; /* ループ変数i */ int j; /* ループ変数j */ /* 二重ループ */ for (j = 0; j < 5; j++){ /* jが5ならこのループは終了. */ for (i = 0; i < 5; i++){ /* iが5ならこのループは終了. */ /* iとjの出力. */ printf("i = %d, ", i); /* iを出力, */ printf("j = %d\n", j); /* jを出力. */ /* iが2なら抜ける. */ if (i == 2){ /* iが2の時. */ break; /* breakで抜ける. */ } } } /* プログラムの終了 */ return 0; /* 0を返して正常終了. */ }
途中で抜けるにしても、
$ vi goto.c $ gcc goto.c -o goto $ ./goto i = 0, j = 0 i = 1, j = 0 i = 2, j = 0 i = 0, j = 1 i = 1, j = 1 i = 2, j = 1 i = 0, j = 2 i = 1, j = 2 i = 2, j = 2 i = 0, j = 3 i = 1, j = 3 i = 2, j = 3 i = 0, j = 4 i = 1, j = 4 i = 2, j = 4 $
外側は抜けられないので、外側は最後まで実行される。
iが2の時、gotoでendラベルに飛ぶようにすると、
$ vi goto.c $ gcc goto.c -o goto $ ./goto i = 0, j = 0 i = 1, j = 0 i = 2, j = 0 end $
外側も抜けて、一気にendラベルに飛ぶ。
Sample/c/goto/goto/src/goto at master · bg1bgst333/Sample · GitHub