goto を使用すると関数内ジャンプが実現できます。基本的に使用しないことが推奨されていますが、下記サンプルコードのような「エラー処理」や「多重ループ break/continue」での使用であれば許容範囲とされることもあります。
エラー処理
#include <iostream>
#include <cstdlib>
using namespace std;
int main() {
const char* error = NULL;
// エラーを発生させてしまった場合
if (true) {
error = "サンプルエラーが発生しました。";
goto ON_ERROR;
}
// goto は変数の初期化を飛び越えられないため
// int n = 0; // とするとエラーになります。
// 正常時の処理
// ...
return EXIT_SUCCESS;
ON_ERROR:
cerr << error << endl;
return EXIT_FAILURE;
}
多重ループ break
#include <iostream>
using namespace std;
int main() {
for (int i = 0; i < 16; ++i) {
for (int j = 0; j < 16; ++j) {
if(true) {
goto LOOP_END;
// ただ、この程度であれば goto せずとも
// i = 16;
// break; // で事足ります。
}
// ...
}
}
LOOP_END:
;
return 0;
}