C言語ではgoto文は極力避けるのが基本です。私はC言語を始めた頃,goto文なしでプログラムを組めるのか迷いました。しかし,goto文を使わないように心がけた結果,わかりやすいプログラムを作れるようになりました。しかし,多重ループから抜けようとすると結構大変です。複数のファイルを指定して次々(iargc=1~(argc-1))と処理するプログラムにおいて,処理中の1つのファイルが大きすぎるときctrlキーによりそのファイルをスキップして次のiargcに移るようにしたいと思いました。ところで,ctrl+cのキー操作によりプログラムは強制終了されてしまいます。ヒープ領域を使っていても,開放せずに終わってしまうのでOSに悪影響を与えます。ctrlキーを押されたらすぐに開放するようにすれば大丈夫なので,ctrl+cの時は強制終了,ctrlキーだけの時は次のファイルにスキップする流れにしました。
ループから抜けるにはbreak文を用いますが,ループの一つ外に出るだけです。そのためこれまでは,フラグを用意して,ループのすぐ外で,フラグが立っていたらさらにbreakでそのループを抜けるようにしていました。下の図のように,多重ループの場合,ループを抜ける度にフラッグチェックしてbreak(前に書いたように,switch文から抜けるところではcontinue)を実行させなければなりません。
そこで,思い切ってgoto文を使うことを考えてみました。すると下の図のようにプログラムがかなり単純化されました。C言語でも最終手段としてgoto文が便利なこともあることを認識しました。