2005年06月14日
川俣晶の縁側ソフトウェア技術雑記 total 2996 count

目から鱗が落ちた! Cのラベル付き文という構文の定義!?

Written By: 川俣 晶連絡先

 これは、プログラム言語ミーハー限定の話題であることを前置きして書きますが。

 何気なく以下の文書を眺めていて、とても目から鱗が落ちる知識を得ました。

プログラム言語C

JIS X 3010:2003

(ISO/IEC 9899:1999)

 この中の以下の箇所です。

6.8.1 ラベル付き文

構文規則

ラベル付き文:

識別子: 文

case 定数式: 文

default : 文

 当たり前すぎてCの言語仕様書など見ていなかったのが敗因です。

 間抜けと言われても当然の当然のことです。

 しかし、これは面白すぎる!

 見ての通り、goto文で使うラベルの構文と、switch文で使うcaseとdefaultの構文が1つの「ラベル付き文」というカテゴリにまとめられています。

 その結果として、これらの構文で使う区切り記号がなぜ共通のコロン":"であるかが明らかになります。同じカテゴリの文なので、同じ記号を使うのが自然な流れということですね。

 昔は、何となく2つは別個のものだと思っていました。何せ、gotoで使うラベルの構文は、アセンブラでよくあるラベル名+":"という構文とそっくりだったので、そのようなものだと誤解していました。そして、もともとPascal系からCに移住した人だったので、caseもラベルに過ぎないという発想が希薄でした。あくまで制御構造の一部であると思っていました。しかし、Cのcaseとは、プログラムの実行の流れを中断しない存在であり、間違いなくラベルとしての性格を持ちます。

 というわけで、今頃になって、目から鱗が落ちました。

 いや~、言語仕様書を読むって楽しいですね!