04/04/25 16:35
/*
防御プログラムとは少々異なるが、>>765のenumとswitchの関係みたいな
どっちかが変更されたら、そもそもプログラムが成立しなくなる様
一意性にこだわって書くスタイルというのもあるな。
例えば
enum Etype {E1, E2, EMAX };
typedef void(*func(void)) FUNC;
const FUNC ftable[EMAX] = { e1Func, e2Func ];
ftable[a]();
…
みたいな。
上ではftableは素の配列だが、java等ならEtypeに変更があれば範囲外参照で例外が飛ぶし、
C++なら定数配列のテンプレートでも使えば簡単に範囲外参照をチェックするようにできる。
Cでも最悪aを引数にした呼び出しマクロ等でチェックできるだろうし、何もしなくても、
いずれクラッシュという形で異常が検出される。
結局、問題点が事故を起こしてから判明するという意味では何の解決にもなっていないし
間の抜けた手には違いない。
その上、上の例の様な書き方はまだるっこしく、直感的でなく、可読性に劣る。
そうなると>>765みたいに警告で救ってもらおうというのは…DQNというより
横着者のやることなわけだが、プログラマにとって横着は美徳。
粘着を美徳と勘違いしてる奴が多いのは実に嘆かわしい事だが。
*/