元プログラム
こんな感じでした。
typedef struct hoge_tag { unsigned char *name; unsigned short type; void *p; } hoge_t; enum { TYPE_STR = 0, TYPE_INT, TYPE_MASK = 0x7f, TYPE_RO = 0x80, }; static const hoge_t hoge_tbl[] = { { "hoge", TYPE_STR, ... }, { "kma", TYPE_INT|TYPE_RO, ... }, }; void hoge_write(void) { hoge_t *p = hoge; hoge_t *endp = hoge + (sizeof(hoge) / sizeof(hoge[0])); while (p < endp) { switch (p->type & TYPE_MASK) { ... } p++; } }