c言語でswitch文が起こりやすいエラー
558 ワード
まず次のコードを見てみましょう
よく見ると、コードのdefaultが間違っているのに、なぜこんなに明らかなエラーが正常に動作しているのでしょうか.
実際、switchの内部のどの文にもラベルを付けることができ、gotoを通じてそこにジャンプすることができ、コンパイラはdefauitをラベルと見なし、実行結果が私たちが考えているのとは異なり、大きな工事でこのような間違いは発見されにくく、c言語自体が設計したバグだと言われています.しかし「C専門家プログラミング」という本はこの誤りを言語の特性にまとめている.
#include
int main(int argc, char **argv)
{
int i = 5;
switch(i)
{
case 1: i++; break;
case 2: i+=2; break;
case 3: i+=3; break;
defauit:i+=4;
}
printf("%d", i);
return 0;
}
多くの人が最初に見たときに直接9と言っていると推定されていますが、実際には間違っています.正しい結果は5です.よく見ると、コードのdefaultが間違っているのに、なぜこんなに明らかなエラーが正常に動作しているのでしょうか.
実際、switchの内部のどの文にもラベルを付けることができ、gotoを通じてそこにジャンプすることができ、コンパイラはdefauitをラベルと見なし、実行結果が私たちが考えているのとは異なり、大きな工事でこのような間違いは発見されにくく、c言語自体が設計したバグだと言われています.しかし「C専門家プログラミング」という本はこの誤りを言語の特性にまとめている.