预处理器数据检索MACRO

时间:2010-06-07 15:52:49

标签: c pointers macros c-preprocessor

鉴于以下结构:

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))

1 个答案:

答案 0 :(得分:2)

#define RETRIEVE(type, element) *((type*)((element)->data))

RETRIEVE(int, nmptr)
// expands to
*((int*)((nmptr)->data))

(未经测试,但应该有效)