38 votes

Décalage de la structure C / C ++

Je suis à la recherche d'un morceau de code qui peut me dire le décalage d'un champ dans une structure sans allouer une instance de la structure.

C'est à dire: compte tenu de

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 chose" déclaration/allouant une?

Je sais que &<struct> n'est pas toujours au point le premier octet de la première zone de la structure, je peux en compte que plus tard.

72voto

Michael Burr Points 181287

Que diriez-vous de la macro offsetof () standard (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))
 

9voto

Dan Points 18831

À droite, utilisez la macro offsetof , qui (au moins avec GNU CC) est disponible pour le code C et C ++:

 offsetof(struct mstct, myfield2)
 

3voto

Frank Krueger Points 27508

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X