Compte tenu de la structure suivante:préprocesseur récupération des données macro
struct nmslist_elem_s {
nmptr data;
struct nmslist_elem_s *next;
};
typedef struct nmslist_elem_s nmslist_elem;
Où:
typedef void* nmptr;
Est-il possible d'écrire une macro qui récupère les données de l'élément et de le jeter au bon type:
MACRO(type, element)
qui s'étend à *((type*)element->data)
. Par exemple pour int, j'aurais besoin de quelque chose comme ceci: *((int*)(element->data))
.
Édition ultérieure: Oui, ils fonctionnent, je "mangeais" certains "(" et ")". Cela fonctionne:
#define NMSLIST_DATA(type,elem) (*((type*)((elem)->data)))
#define NMSLIST_DATA_REF(type,elem) ((type*)((elem)->data))
Quel est le problème avec '#define get_data (type, élément) * ((type *) element-> données)'? Est-ce que je manque quelque chose? – sbi
@sbi parenthèses autour de 'element'? –
@Pete: Ah, ouais. (Je suis un programmeur C++ ...) – sbi