C言語今更再認識: ラベルの後にセミコロンが要る場合 | 技術日誌

技術日誌

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

 C言語では通常goto文は使いません。しかし,深い多重ループから一気に抜け出すにはgoto文が有効であることをすでに述べました。そこで多重ループを含むプログラムにgoto文を使ってみました。これまでは「goto文はよくない(プログラムが見にくくなる)」という認識があったので長年使っていませんでした。今回初めて使います。goto文の行き先はラベルです。ラベルの使用も初めてです。使ったところコンパイル・エラーが発生しました。説明をわかりやすくするために簡単なプログラム例で示します。下のプログラムはエラーとなりました。

 

 ラベルは“名前”+“:”で良いはずですが,「“;”が必要」とメッセージが出ました。しかし,次のプログラムではエラーになりません。

 ここで再認識したのは,「ラベルは文に付けるもの」ということです。C言語では改行は意味を持ちません。文の区切りはセミコロンです。下側のプログラムでは,「TESTLAVEL:printf…;」となり,printf文に付けたラベルとなり,理解できます。しかし,エラーになった例では「TESTLAVEL:}」となります。「}」は文ではないので原則に反していたのでしょう。次のプログラムでもエラーになりません。ラベル(:を含む)の次に;があり,空の文があると理解できます。