デフォルトって?

ありがちダメなコードのダメな理由を書くコーナー。

char const* getNameFromID(int id) {
  switch (id) {
    case ID_FOO:
      return "FOO";
    case ID_BAA:
      return "BAA";
    default:
      return "TEST";
  }
}

ID_FOOを受け取った場合に"FOO"、ID_BAAを受け取った場合に"BAA"を返すという関数、というところまでは良い(役に立つかどうかは別として)。問題はdefault時に返す"TEST"の存在だ。
まず「正しい動作」を確認しなければならない。このソースコードから逆算すると次の三つくらいはありえるだろう。さて、どれが「正しい動作」なのだろうか。

  • ID_FOO,ID_BAA以外のときは"TEST"を返す。
  • ID_FOO, ID_BAA以外のときは未定義。
  • ID_TESTのときは"TEST"を返す。ID_FOO, ID_BAA, ID_TEST以外のときは未定義。