Perlテックブログ

ITエンジニアの成長意欲を刺激する技術考察、モジュール開発の日記。Perlイベントや国内や海外のPerlの記事の紹介。

C言語のラベルは必ず実行文を持たないといけないって知ってた?

f:id:perlcodesample:20180606084245p:plain

C言語でときどきエラーになって原因がよくわからなくって、対処療法的にしてたんだけど、その理由が一つわかった。


C言語のラベルは必ず実行文を持たないといけないということだった。


こういうのは、エラーになっちゃう。実行分がないから。

{
  LABEL1 :
}

でもこういうのはいけそうな気がしない? なんか大丈夫な気がするじゃない。

{
  LABEL1 :
    int32_t num;
}

でも、これがエラーになっちゃう。「なんで、なんで?」

それは、


C言語において、変数宣言は、実行文じゃないから。


C言語の変数宣言は、宣言であって、実行文じゃないのね。

ラベルは、必ず実行文を必要とする。でも変数宣言は、実行分じゃないってこと。

どうしてもラベルが必要で、実行分がその位置にないときは、意味のない「1;」って書いておけば動く。きっと最適化で取り除かれる。

{
  LABEL1 :
    1;
}