#include <stdint.h> // <cstdint> en C++
La librairie <stdint.h> ne se limite pas à définir des types. Elle fournit aussi des macros permettant de connaître les
limites associées à ces types. Ces constantes évitent d'écrire des valeurs magiques dans le code.
| Famille | Exemples | Description |
|---|---|---|
| Types signés de largeur exacte | INT8_MIN, INT8_MAX, INT32_MIN, INT32_MAX |
Bornes des types int8_t, int16_t, int32_t et int64_t. |
| Types non signés de largeur exacte | UINT8_MAX, UINT16_MAX, UINT32_MAX, UINT64_MAX |
Valeurs maximales des types non signés de largeur exacte. |
Types least et fast |
INT_LEAST16_MIN, UINT_FAST32_MAX |
Bornes des familles garantissant une largeur minimale ou une manipulation rapide. |
| Types liés aux pointeurs | INTPTR_MIN, INTPTR_MAX, UINTPTR_MAX |
Bornes des types intptr_t et uintptr_t, s'ils existent. |
| Types maximaux | INTMAX_MIN, INTMAX_MAX, UINTMAX_MAX |
Bornes des types intmax_t et uintmax_t. |
| Types entiers standards associés | PTRDIFF_MIN, PTRDIFF_MAX, SIZE_MAX |
Bornes associées à ptrdiff_t et size_t. |
| Types de caractères larges | WCHAR_MIN, WCHAR_MAX, WINT_MIN, WINT_MAX |
Bornes associées aux types utilisés pour les caractères larges. |
Type sig_atomic_t |
SIG_ATOMIC_MIN, SIG_ATOMIC_MAX |
Bornes associées au type utilisé pour certaines communications avec les gestionnaires de signaux. |
| Annexe K | RSIZE_MAX |
Valeur maximale acceptée par les fonctions de contrôle de bornes, si l'annexe K est disponible. |
Le bloc suivant utilise UINT8_MAX pour vérifier qu'une valeur peut être stockée dans un entier non signé sur 8 bits.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#include <stdint.h> #include <stdio.h> #include <stdlib.h> int main() { unsigned int value = 300; if ( value > UINT8_MAX ) { printf( "%u ne tient pas dans un uint8_t\n", value ); } else { uint8_t byte = (uint8_t) value; printf( "byte == %u\n", (unsigned int) byte ); } return EXIT_SUCCESS; } |
Les résultats produits par cet exemple sont :
300 ne tient pas dans un uint8_t
Les macros associées aux types conditionnels suivent la même règle que les types eux-mêmes : elles ne sont définies que si le type
correspondant existe. De même, RSIZE_MAX n'est disponible que pour les implémentations fournissant l'annexe K.
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 :