web-dev-qa-db-fra.com

C / C ++ Compensation de la structure

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.

36
davenpcj

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))
71
Michael Burr

Droite, utilisez la macro offsetof, qui (au moins avec GNU CC) est disponible pour CO et C++ Code:

offsetof(struct mstct, myfield2)
9
Dan Lenski

printf ("offset:% d\n", & ((mst *) 0) -> myfield2);

3
Frank Krueger