#include <stdint.h> // <cstdint> en C++
Les suffixes des constantes entières du langage C peuvent devenir pénibles à maintenir quand on veut viser une largeur précise. La librairie
<stdint.h> fournit donc des macros permettant de construire une constante adaptée au type souhaité.
| Famille | Exemples | Description |
|---|---|---|
| Constantes signées | INT8_C, INT16_C, INT32_C, INT64_C |
Construit une constante compatible avec la largeur signée demandée. |
| Constantes non signées | UINT8_C, UINT16_C, UINT32_C, UINT64_C |
Construit une constante compatible avec la largeur non signée demandée. |
| Constantes maximales | INTMAX_C, UINTMAX_C |
Construit une constante compatible avec intmax_t ou uintmax_t. |
L'exemple suivant construit deux constantes 64 bits. Le code reste lisible et laisse le préprocesseur produire le suffixe réellement adapté à la plate-forme.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#include <stdint.h> #include <stdio.h> #include <stdlib.h> int main() { int64_t signedValue = INT64_C( -10000000000 ); uint64_t unsignedValue = UINT64_C( 10000000000 ); printf( "signedValue == %lld\n", (long long) signedValue ); printf( "unsignedValue == %llu\n", (unsigned long long) unsignedValue ); return EXIT_SUCCESS; } |
Les résultats produits par cet exemple sont :
signedValue == -10000000000 unsignedValue == 10000000000
Ces macros sont surtout intéressantes quand vous écrivez du code portable. Elles évitent de présumer qu'un suffixe comme LL
ou ULL correspond exactement à ce que vous voulez sur toutes les plates-formes visées.
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 :