Je cherche un morceau de code qui peut me dire le décalage d'un champ dans une structure sans attribuer une instance de la structure.
IE: donné
struct mstct {
int myfield;
int myfield2;
};
Je pourrais écrire:
mstct thing;
printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing));
Et obtenir offset 4
pour la sortie. Comment puis-je le faire sans que mstct thing
Déclaration/Allocation d'un?
Je sais que &<struct>
ne pointe pas toujours au premier octet du premier champ de la structure, je peux en rendre compte ultérieurement.
Qu'en est-il de la norme offsetof () macro (dans stddef.h)?
EDIT: Pour les personnes qui pourraient ne pas avoir la macro offsetof () disponible pour une raison quelconque, vous pouvez obtenir l'effet en utilisant quelque chose comme:
#define OFFSETOF(type, field) ((unsigned long) &(((type *) 0)->field))
Droite, utilisez la macro offsetof
, qui (au moins avec GNU CC) est disponible pour CO et C++ Code:
offsetof(struct mstct, myfield2)
printf ("offset:% d\n", & ((mst *) 0) -> myfield2);