#include #define MDECL_CONCAT_(a,b) a##b #define MDECL_CONCAT(a,b) MDECL_CONCAT_(a,b) struct MDECL_CONCAT(M_NAME,_data) { #define M(n, s) char m_##n[sizeof(s)]; #include M_SOURCE #undef M }; typedef unsigned char MDECL_CONCAT(M_NAME,_offsets)[sizeof (unsigned char []){ #define M(n, s) [2*((n)-M_BASE)] = 0, 0, #include M_SOURCE #undef M }]; struct M_NAME { unsigned char header[12]; MDECL_CONCAT(M_NAME,_offsets) offsets; struct MDECL_CONCAT(M_NAME,_data) data; }; #undef MDECL_CONCAT #undef MDECL_CONCAT_