Czy można zmodyfikować to X-Macro, aby zbudować strukturę, która zawiera tablice? W jaki sposób?
Znalazłem to bardzo pomocne Q / A na SO:Czy jest jakiś sposób na przejście przez strukturę z elementami różnych typów w C?
ale ponieważ jestem całkiem nowy w całym X-Macro, zastanawiałem się, czy i jak byłoby możliwe dostosowanie tego przykładu do struktury z tablicami - tak:
typedef struct
{
uint8 Addr1[SIZEOF_ADDR];
uint8 Addr2[SIZEOF_ADDR];
uint8 Addr3[SIZEOF_ADDR];
} TEST;
To byłoby dostosowanie:
//--- 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;
Mój punkt wyjścia był taki, ale jestem pewien, że format musiałby być czymś innym lub musiałby zostać zastąpiony:
#define X_FIELDS \
X(uint8, Addr1, "%02X") \
X(uint8, Addr2, "%02X") \
X(uint8, Addr3, "%02X")
Adres byłby taki jak {0x10,0x12,0x0A} - wszystkie o tym samym rozmiarze.
Edytować:
Oto przykład tego, jak obecnie używam tej struktury, bez x-macros:
TEST test = {{0x16,0xA4,0x3},
{0x16,0xA4,0x2},
{0x16,0xA4,0x1}};
printf("%02X",test.addr1[i]);