Учитывая следующую структуру:
struct nmslist_elem_s {
nmptr data;
struct nmslist_elem_s *next;
};
typedef struct nmslist_elem_s nmslist_elem;
Где:
typedef void* nmptr;
Можно ли написать MACRO, который извлекает данные из элемента и приводит их к нужному типу:
MACRO(type, element)
, который расширяется до *((type*)element->data)
.
Например, для int мне нужно что-то вроде этого: *((int*)(element->data))
.
Позже редактировать:
Да, они работают, я "ел" некоторые "(" и ")".
Это работает:
#define NMSLIST_DATA(type,elem) (*((type*)((elem)->data)))
#define NMSLIST_DATA_REF(type,elem) ((type*)((elem)->data))