XMacro中的结构

时间:2016-12-08 16:48:07

标签: c struct x-macros

我正在尝试从XMacro表中为结构赋值。

有没有其他方法可以将“offset”分配给struct的这个值?

typedef enum Time_Unit_Tag
{
    NO_UNIT,
    HOUR,
    MINUTES,
    SECONDS,
    TOTAL_UNITS
} Time_Unit_T;

enum
{
    OFFSET_HOUR = 0,
    OFFSET_MIN  = 2,
    OFFSET_SEC  = 4
};

#define CHANGE_TIME \
TIME(HOUR,    "HOUR"   ,  OFFSET_HOUR)\
TIME(MINUTES, "MINUTES",  OFFSET_MIN )\
TIME(SECONDS, "SECONDS",  OFFSET_SEC )\

#undef TIME
#define TIME(unit, desc, offset)\
if(count == unit)\
{\
    P(desc)\
    format_clock.offset = offset;\
}\

1 个答案:

答案 0 :(得分:0)

制作一个结构,实际上是3个项目的数组

struct {
    Time_Unit_T unit;
    char *desc;
    int offset;  // could also use enum{}, but the one above has no tag
} mystruct[3]

并初始化

= {
#define TIME(u, d, o)  { u, d, o },
CHANGE_TIME
};

使用x-macro,您可以以正确的格式定义新的内部宏。这里{ u, d, o },初始化程序的格式。