#include <stddef.h> // <cstddef> en C++
size_t offsetof( type, member-designator );
La macro offsetof calcule le décalage, en octets, d'un membre dans une structure. Le résultat est une constante entière de
type size_t. Cette macro est surtout utile dans du code bas niveau, dans des formats binaires ou pour
décrire précisément l'organisation mémoire d'une structure.
L'exemple suivant calcule la position de plusieurs champs dans une structure. Les valeurs exactes peuvent varier selon les règles d'alignement de la plate-forme.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <stddef.h> #include <stdio.h> #include <stdlib.h> struct Header { char marker; int version; double checksum; }; int main() { printf( "marker == %lu\n", (unsigned long) offsetof( struct Header, marker ) ); printf( "version == %lu\n", (unsigned long) offsetof( struct Header, version ) ); printf( "checksum == %lu\n", (unsigned long) offsetof( struct Header, checksum ) ); return EXIT_SUCCESS; } |
Sur une machine courante, les résultats produits peuvent être :
marker == 0 version == 4 checksum == 8
offsetof sur un champ de bits. De plus, même si cette macro donne des informations utiles sur une structure,
elle ne doit pas faire oublier que l'organisation mémoire peut varier d'une architecture ou d'un compilateur à l'autre.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :