機能していないコードを調べていると、switchステートメントから「ケース」を除外していることに気付きました。バギーコードは次の形式でした
switch (foo) {
firstElem:
...
break;
secondElem:
...
break;
}
ここでfirstElem
、secondElem
は列挙リストの一部です。switch
コードをステップスルーすると、一致するものが見つからないため、閉じ括弧からジャンプします。
これは簡単に修正できましたが、コンパイル時も実行時もXCodeがまったく文句を言わなかったため、不安になりました。なんで?
- 言語の構造に、
switch case
解釈を難しくする何かがありますか? - 他の動作(私は何も知りません)を生成するためにステートメントを省略したい場合がありますか?
case
- これは他の言語でも起こりますか?Objective-Cは「Cの厳密なスーパーセット」であることを知っているので、Cでも同じことが起こる可能性があると思います(コンパイラによって異なります)。Javaはどうですか?C ++?
更新:私はXCode 4.4.1を使用しています(ただし、すぐにアップグレードします)。これは確立されたプロジェクトの一部です。**
さらなる更新と参照KevinBallardは、私が誤ってラベルを定義していたことを正しく指摘しました。ラベルとGOTOの詳細については、Cプログラミング言語3.8で、カーニハンとリッチーが次のように結論付けているディスカッションを見つけることができます(ただし、エラーチェックにある程度役立つ可能性があります)。
... gotoステートメントに依存するコードは、一般に、gotosを使用しないコードよりも理解および保守が困難です。私たちはこの問題について独断的ではありませんが、gotoステートメントが使用されることはほとんどないようです。