Можно ли изменить этот X-Macro для создания структуры, которая включает в себя массивы? Как?
Нашел это очень полезное Q / A на SO:Есть ли способ пройти через структуру с элементами разных типов в C?
но так как я совершенно новичок во всем, что касается X-Macro, мне было интересно, можно ли и как-нибудь адаптировать этот пример для структуры с массивами - вот так:
typedef struct
{
uint8 Addr1[SIZEOF_ADDR];
uint8 Addr2[SIZEOF_ADDR];
uint8 Addr3[SIZEOF_ADDR];
} TEST;
Вот что бы адаптировать:
//--- first describe the structure, the fields, their types and how to print them
#define X_FIELDS \
X(int, field1, "%d") \
X(int, field2, "%d") \
X(char, field3, "%c") \
X(char *, field4, "%s")
//--- define the structure, the X macro will be expanded once per field
typedef struct {
#define X(type, name, format) type name;
X_FIELDS
#undef X
} mystruct;
Моя отправная точка была такой, но я уверен, что формат должен был бы быть чем-то другим, или должен был бы быть заменен:
#define X_FIELDS \
X(uint8, Addr1, "%02X") \
X(uint8, Addr2, "%02X") \
X(uint8, Addr3, "%02X")
Адрес будет что-то вроде {0x10,0x12,0x0A} - все одного размера.
Редактировать:
Это пример того, как я использую эту структуру в настоящее время, без х-макросов:
TEST test = {{0x16,0xA4,0x3},
{0x16,0xA4,0x2},
{0x16,0xA4,0x1}};
printf("%02X",test.addr1[i]);