Структурировать в XMacro

Я пытаюсь присвоить значение для структуры из таблицы XMacro.

Есть ли другой способ присвоить "смещение" этому значению структуры?

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 ответ

Решение

Сделайте структуру, фактически массив для 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 }, формат для инициализатора.

Другие вопросы по тегам