Препроцессор поиска данных MACRO - PullRequest
0 голосов
/ 07 июня 2010

Учитывая следующую структуру:

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 Ответ

2 голосов
/ 07 июня 2010
#define RETRIEVE(type, element) *((type*)((element)->data))

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

(не проверено, но должно работать)

...