C言語の構文のswitch-caseは結構変わった仕組みになってる
caseはラベルとして表現されている
identifier : statement
case constant-expression : statement
default : statement
caseの後に続くものはstatementになっている。なので、以下のコードは規格では許容されない
int bb = 2
は宣言であって文ではないので。
gccは許容するが、規格には無いので--pedantic
をつけると警告を出す
$ gcc tmp.c --pedantic
tmp.c: In function ‘main’:
tmp.c:5:13: warning: a label can only be part of a statement and a declaration is not a statement [-Wpedantic]
5 | case 1: int bb = 2;
| ^~~
switchは次のような構文になっている
switch ( expression ) statement
普段書くようなswitch-caseは、このstatementとしてにcaseやdefaultが含まれたブロックが用いられている。