Как при создании структуры внутри макроса сгенерировать ее имя из переданного в макрос значения?
#define EXAMPLE_MACRO(val_type, postfix) \
struct example_struct_postfix { \
val_type val; \
};
EXAMPLE_MACRO(int, name);
Я хочу чтоб в данном примере, было сгенерировано example_struct_name, но генерируется example_struct_postfix
Ответы (2 шт):
Автор решения: Fat-Zer
→ Ссылка
Для этого есть оператор ##, который производит макрорасширение своих аргументов, а потом конкатенирует результат:
#define EXAMPLE_MACRO(val_type, postfix) \
struct example_struct_ ## postfix { \
val_type val; \
};
См. подробности в любом справочнике по языку в разделе с макросами.
Автор решения: HolyBlackCat
→ Ссылка
Вот так: example_struct_##postfix.
Если передать в качестве имени другой макрос, то будет взято имя макроса, а не его значение. Т.е.: #define A B EXAMPLE_MACRO(int, A) -> example_struct_A.
Если это мешает, то так:
#define CAT(x, y) CAT_(x, y)
#define CAT_(x, y) x##y
CAT(example_struct_, postfix)