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