2013年4月17日水曜日

objective-cのswitch文でexpected expressionエラー

objective-cのswitch文でcase文の直後に変数宣言をするとexpected expressionというエラーが発生する。
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文の直後に宣言するときのみ、新規スコープの宣言が必要

だそうです。