なんだこれは

はてなダイアリーから移転しました。

8でわった余りは?

以下のような switch 文があった。
foo.bar の型は unsigned char だったはず。
この値は、8でわった余りだから 0から7になる、数学的には。

switch( (foo.bar--)%8){
  case 0: x=1 ; break;
  case 1: x=3 ; break;
  case 2: x=5 ; break;
  case 3: x=7 ; break;
  case 4: x=9 ; break;
  case 5: x=2 ; break;
  case 6: x=8 ; break;
  case 7: x=4 ; break;
  default: x=0; break;
}

default句は通らないはずなんだが、通った。

どうしてかだって?さあね、知らないよ。コンパイラのバグなんじゃないの。
あんまり信用してはいけないみたいだね。この製品。