ryochack
5/20/2014 - 3:43 PM

#includeを使ってビルド時にenumのインデックスと配列データの整合性を確保する方法

#includeを使ってビルド時にenumのインデックスと配列データの整合性を確保する方法

struct resource_info {
  unsigned short addr;
  unsigned short len;
};

#define RESOURCE(id, addr, len) id
enum resource_id {
#include "resource.inc"
};
#undef RESOURCE

#define RESOURCE(id, addr, len) {addr, len}
struct resource_info rsc_blks[] = {
#include "resource.inc"
};
#undef RESOURCE

int main(int argc, char **argv)
{
  unsigned short addr = rsc_blks[E_RSC08].addr;
  unsigned short len  = rsc_blks[E_RSC08].len;
  return 0;
}
/* resource_id, addr, len */
RESOURCE( E_RSC01, 0x10, 4 ),
RESOURCE( E_RSC02, 0x14, 2 ),
RESOURCE( E_RSC03, 0x16, 2 ),
RESOURCE( E_RSC04, 0x18, 4 ),
RESOURCE( E_RSC05, 0x20, 1 ),
RESOURCE( E_RSC06, 0x21, 1 ),
RESOURCE( E_RSC07, 0x22, 2 ),
RESOURCE( E_RSC08, 0x24, 4 ),