これは、プログラム言語ミーハー限定の話題であることを前置きして書きますが。
何気なく以下の文書を眺めていて、とても目から鱗が落ちる知識を得ました。
プログラム言語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とは、プログラムの実行の流れを中断しない存在であり、間違いなくラベルとしての性格を持ちます。
というわけで、今頃になって、目から鱗が落ちました。
いや~、言語仕様書を読むって楽しいですね!