offsetof(3) Library Functions Manual offsetof(3) NOM offsetof - Decalage d'un membre d'une structure BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) SYNOPSIS #include size_t offsetof(type, membre); DESCRIPTION La macro offsetof() renvoie le decalage du champ membre a partir du debut de la structure type. Cette macro est utile car la taille des champs qui composent une structure peut varier d'une implementation a l'autre. De plus, les compilateurs peuvent inserer des octets entre les champs pour des questions d'alignement, le nombre de ces octets dependant de chaque compilateur. Ainsi, le decalage d'un element n'est pas forcement egal a la somme des tailles des membres qui le precedent. Une erreur de compilateur sera signalee si membre n'est pas aligne avec une frontiere d'octet (c'est-a-dire qu'il s'agit d'un champ de bits). VALEUR RENVOYEE offsetof() renvoie le decalage (en octets) du membre specifie a l'interieur de la structure type. STANDARDS C11, POSIX.1-2008. HISTORIQUE POSIX.1-2001, C89. EXEMPLES Sur un systeme Linux/i386, le programme ci-dessous, compile avec les options par defaut de gcc(1), affichera le resultat suivant : $ ./a.out decalages: i=0 c=4 d=8 a=16 sizeof(struct s)=16 Source du programme #include #include #include int main(void) { struct s { int i; char c; double d; char a[]; }; /* Output is compiler dependent */ printf("offsets: i=%zu; c=%zu; d=%zu a=%zu\n", offsetof(struct s, i), offsetof(struct s, c), offsetof(struct s, d), offsetof(struct s, a)); printf("sizeof(struct s)=%zu\n", sizeof(struct s)); exit(EXIT_SUCCESS); } TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier et David Prevot Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 offsetof(3)