SO に関する非常に役立つ Q/A を見つけました: Is there any way to loop through a struct with elements of different types in 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} のようなもので、すべて同じサイズです。
編集:
これは、x-マクロなしで、現在この構造体をどのように使用しているかの例です。
TEST test = {{0x16,0xA4,0x3},
{0x16,0xA4,0x2},
{0x16,0xA4,0x1}};
printf("%02X",test.addr1[i]);