我想用 X-Macro 生成一个枚举。枚举必须根据 prev 大小增加。
我有这个
#define LIST
VAR(one, 0x02)
VAR(two, 0x02)
VAR(tree, 0x03)
并想生成这个
enum{
one = 0x02 + 0,
two = 0x02 + one,
tree = 0x03 + two
}
但这不起作用
#define VAR(NAME, SIZE) STORED_LOCATION_##NAME = SIZE + (STORED_LOCATION_##NAME-1)
enum{STORED_VARIABLES};
#undef VAR
这行得通,但我觉得它可以更容易
#define LIST \
VAR(one ) STR(STORED_LOCATION )\
VAR(two ) PRE(one )\
VAR(tree ) PRE(two )\
VAR(fore ) PRE(tree )\
enum
{
one = 0x00,
two = 0x01 + one,
tree = 0x01 + two,
fore = 0x01 + tree,
};
#define STR(OFFSET) OFFSET,
#define PRE(NAME) sizeof(##NAME) + STORED_LOCATION_##NAME,
#define VAR(NAME) STORED_LOCATION_##NAME =
enum{STORED_VARIABLES};
#undef VAR
#undef PRE
#undef STR