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é

La librairie <stddef.h> (<cstddef> en C++)

Le type size_t


Accès rapide :
Présentation de l'entête <stddef.h>
Exemple d'utilisation
Eléments fournis par la librairie <stddef.h>

Présentation de l'entête <stddef.h>

La librairie <stddef.h> fournit plusieurs définitions de base utilisées par de nombreuses autres librairies du langage C. On y trouve notamment le type size_t, le type ptrdiff_t, la macro NULL et la macro offsetof.

Cette librairie est discrète, mais elle intervient dès que l'on parle de tailles mémoire, de différences entre pointeurs, de pointeurs nuls ou de structures. En C++, l'entête équivalent est <cstddef>. Certains éléments y sont alors placés dans l'espace de noms std, comme std::size_t ou std::ptrdiff_t.

Pour utiliser les définitions proposées par cette librairie, il suffit d'inclure l'entête suivant.

#include <stddef.h>

Exemple d'utilisation

L'exemple suivant utilise plusieurs définitions de <stddef.h> : size_t pour compter des éléments, ptrdiff_t pour conserver une différence entre deux pointeurs et offsetof pour connaître la position d'un champ dans une structure.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>

struct Person {
    int id;
    double score;
};

int main() {

    int values[] = { 10, 20, 30, 40, 50 };
    size_t count = sizeof values / sizeof values[0];
    ptrdiff_t distance = &values[4] - &values[1];
    size_t scoreOffset = offsetof( struct Person, score );

    printf( "count == %lu\n", (unsigned long) count );
    printf( "distance == %ld\n", (long) distance );
    printf( "score offset == %lu\n", (unsigned long) scoreOffset );

    return EXIT_SUCCESS;
}
Exemple d'utilisation de stddef.h

Les résultats produits par cet exemple peuvent varier pour l'offset, car l'alignement d'une structure dépend de la plate-forme. Sur une machine courante, on peut par exemple obtenir :

count == 5
distance == 3
score offset == 8

Eléments fournis par la librairie <stddef.h>

Nom Depuis Description
NULL C89 Macro représentant une constante de pointeur nul.
max_align_t C11 Type dont l'alignement est compatible avec les types fondamentaux les plus contraignants.
nullptr_t C23 Type associé à la constante de pointeur nul nullptr.
offsetof C89 Macro calculant le décalage, en octets, d'un membre dans une structure.
ptrdiff_t C89 Type entier signé permettant de stocker le résultat d'une soustraction de pointeurs.
rsize_t C11 Type optionnel de l'annexe K pour les tailles contrôlées.
size_t C89 Type entier non signé utilisé pour représenter des tailles et des quantités d'objets.
unreachable C23 Macro indiquant qu'un point du programme ne peut pas être atteint.
wchar_t C89 Type destiné à représenter un caractère large.


Le type size_t




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