Accès rapide :
Présentation de l'entête <stddef.h>
Exemple d'utilisation
Eléments fournis par la librairie <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>
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; } |
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
| 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. |
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 :