デフォルトって?
ありがちダメなコードのダメな理由を書くコーナー。
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以外のときは未定義。