そのときの最大値が無効値ってちょっと頭おかしいんじゃないの?

とか思った件があった。
どういうことかというと、

enum {
    HOGE_FOO_ID00
    HOGE_FOO_ID01
    ....
    CHR_ID_MAX,
};

みたいな定義がある。
キャラクタのID定義だと思ってくんさい。
驚いたことに、このCHR_ID_MAXを「無効値」として扱う糞文化がある。

ぽかーん、だよ、ぽかーん。
どうしてって?
CHR_ID_MAXって、キャラクタが増えたら変わる値でしょ?
変動値を無効値にしてどうすんの?
アホか?

困ったことに、これはセーブデータにも書き込まれたりする。
アホか!!!
開発中にキャラクタが増えるだけでセーブデータが使えなくなる。
だって、
セーブした時点での無効値は、
キャラクタが増えたあとでは有効値になっちゃうんだぜ?

例えば、
ITEM_ID_MAX
を無効値にしていて、アイテムが増えた場合、
たまたま、ITEM_ID_MAXの値と同じ値を持ったアイテムが、
道具箱の中には一杯になるんだぜ?

\^o^/オッチャワーン
アホにも程があるだろ。
どこのどいつだ、こんな糞を考えたのは。

正直……さ、-1でいいんじゃね?
INT_MAXとかでも良いけどさ……。
無効値が有効値に化けるってありえなくね?
もう変更不能だし、泣くぜ!