【问题标题】:Preprocessor data retrieval MACRO预处理器数据检索宏
【发布时间】:2010-06-07 15:52:48
【问题描述】:

给定以下结构:

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

【问题讨论】:

  • #define GET_DATA(type, element) *((type*)element->data) 有什么问题?我错过了什么吗?
  • @sbi 括号围绕element?
  • @Pete:啊,是的。 (我是 C++ 程序员...)

标签: c pointers macros c-preprocessor


【解决方案1】:
#define RETRIEVE(type, element) *((type*)((element)->data))

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

(未经测试,但应该可以)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 1970-01-01
    • 2015-07-31
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    相关资源
    最近更新 更多