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é

Les constantes de limites de <stdint.h>

Les types intmax_t et uintmax_t Les macros de constantes entières


Entête à inclure

#include <stdint.h>  // <cstdint> en C++

Valeurs minimales et maximales

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;
}
Utilisation d'une constante de limite

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.

Sujets connexes

La librairie stdint.h
Macros de constantes entières
Types de largeur exacte
Types int_leastN_t et int_fastN_t


Les types intmax_t et uintmax_t Les macros de constantes entières




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