Cで静的に連想配列を生成したいんだがなんとかならんのか
仕事で
struct st{ int id; int x; int y; }; enum {hoge, fuga, aho, baka, end_enum}; struct st ary[] = { {hoge, 1,100}, {fuga, 2,200}, {aho, 3,300}, {baka, 4,400} };
って定義して、
foo(int id) { for(i=0 ; i < end_enum ; i++) { if(ary[i].id == id) ... } }
ってわざわざ線形探索してるコードが多い。enumの定義順とaryの初期値の定義順のずれを恐れてるのかなあ。
静的な連想配列を生成するマクロって作れないかなあ?
INSERT(ary, hoge, ({1,100})); INSERT(ary, fuga, ({2,200})); INSERT(ary, aho, ({3,300})); INSERT(ary, baka, ({4,400})); ... ary[fuga] // =>{2,200}
みたいに単に配列の添え字にenumを入れるだけでOKなコードを生成するマクロが欲しい。
スクリプトでコード生成するしかないかなあ。