C言語今更再認識: goto文の使用 | 技術日誌

技術日誌

ここでは,電子工作,木工などの趣味での記録を書いています。
なお当初はKMK研究所のメインテーマであるSPSのノウハウを書いてきましたが,順次SPSノウハウのページに複製を作っていきます。

 C言語ではgoto文は極力避けるのが基本です。私はC言語を始めた頃,goto文なしでプログラムを組めるのか迷いました。しかし,goto文を使わないように心がけた結果,わかりやすいプログラムを作れるようになりました。しかし,多重ループから抜けようとすると結構大変です。複数のファイルを指定して次々(iargc=1~(argc-1))と処理するプログラムにおいて,処理中の1つのファイルが大きすぎるときctrlキーによりそのファイルをスキップして次のiargcに移るようにしたいと思いました。ところで,ctrl+cのキー操作によりプログラムは強制終了されてしまいます。ヒープ領域を使っていても,開放せずに終わってしまうのでOSに悪影響を与えます。ctrlキーを押されたらすぐに開放するようにすれば大丈夫なので,ctrl+cの時は強制終了,ctrlキーだけの時は次のファイルにスキップする流れにしました。

 ループから抜けるにはbreak文を用いますが,ループの一つ外に出るだけです。そのためこれまでは,フラグを用意して,ループのすぐ外で,フラグが立っていたらさらにbreakでそのループを抜けるようにしていました。下の図のように,多重ループの場合,ループを抜ける度にフラッグチェックしてbreak(前に書いたように,switch文から抜けるところではcontinue)を実行させなければなりません。

フラグ式ループ抜け.jpg

 

 そこで,思い切ってgoto文を使うことを考えてみました。すると下の図のようにプログラムがかなり単純化されました。C言語でも最終手段としてgoto文が便利なこともあることを認識しました。