switch( hoge ){ case 0: int i; // expected expression break; }
解決方法は簡単で、case文内でスコープを定義すれば良い。
switch( hoge ){ case 0: { int i; break; } }
理由はObjective-C勉強室というサイトに載っていた。以下引用。
古いCの場合、ローカルに新規の変数を使う場合は必ず新しいスコープの先頭(宣言文以外が出てくるまで)に宣言しなければならなかったが、 Objective-Cではこれがかなり緩くなる。本当は最近のCの規格ではそういうものらしい。 ただし、一部例外がある。
(中略)switch文のcase文の直後に宣言するときのみ、新規スコープの宣言が必要
だそうです。