鉴于以下结构:
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))
答案 0 :(得分:2)
#define RETRIEVE(type, element) *((type*)((element)->data))
RETRIEVE(int, nmptr)
// expands to
*((int*)((nmptr)->data))
(未经测试,但应该有效)