Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Macro offsetof

La macro NULL Le type wchar_t


Entête à inclure

#include <stddef.h>  // <cstddef> en C++

Macro offsetof

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;
}
Calculer le décalage d'un champ

Sur une machine courante, les résultats produits peuvent être :

marker == 0
version == 4
checksum == 8
N'utilisez pas 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.

Sujets connexes

La librairie stddef.h
size_t
Types et variables du langage C


La macro NULL Le type wchar_t




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé