inttypes.h(3)
πΈ inttypes.h π
okay bestie, gather round, because this is the header that makes your printf and scanf stop being messy. it's inttypes.h, and it comes to you straight from avr-libc. it's giving "I brought the right format specifier for every single integer width so you never have to guess again." iconic behaviour, honestly. π
β¨ NAME β¨
inttypes.h β the header that hands you portable macros for printing and scanning fixed-width integers. no cap. π
π¦ SYNOPSIS π¦
π Macros
macros for printf and scanf format specifiers π«Ά
heads up for my C++ girlies: for C++, these are only included if__STDC_LIMIT_MACROSis defined before including<inttypes.h>. so define it first or you literally get nothing. not me learning that the hard way π
okay so here's the whole cast, starting with the signed decimal d and i crew for the printf side:
#define PRId8 'd'
#define PRIdLEAST8 'd'
#define PRIdFAST8 'd'
#define PRIi8 'i'
#define PRIiLEAST8 'i'
#define PRIiFAST8 'i'
#define PRId16 'd'
#define PRIdLEAST16 'd'
#define PRIdFAST16 'd'
#define PRIi16 'i'
#define PRIiLEAST16 'i'
#define PRIiFAST16 'i'
#define PRId32 'ld'
#define PRIdLEAST32 'ld'
#define PRIdFAST32 'ld'
#define PRIi32 'li'
#define PRIiLEAST32 'li'
#define PRIiFAST32 'li'
#define PRIdPTR PRId16
#define PRIiPTR PRIi16
then the octal o, unsigned u, lowercase hex x and uppercase hex X girlies β same energy, different bases:
#define PRIo8 'o'
#define PRIoLEAST8 'o'
#define PRIoFAST8 'o'
#define PRIu8 'u'
#define PRIuLEAST8 'u'
#define PRIuFAST8 'u'
#define PRIx8 'x'
#define PRIxLEAST8 'x'
#define PRIxFAST8 'x'
#define PRIX8 'X'
#define PRIXLEAST8 'X'
#define PRIXFAST8 'X'
#define PRIo16 'o'
#define PRIoLEAST16 'o'
#define PRIoFAST16 'o'
#define PRIu16 'u'
#define PRIuLEAST16 'u'
#define PRIuFAST16 'u'
#define PRIx16 'x'
#define PRIxLEAST16 'x'
#define PRIxFAST16 'x'
#define PRIX16 'X'
#define PRIXLEAST16 'X'
#define PRIXFAST16 'X'
#define PRIo32 'lo'
#define PRIoLEAST32 'lo'
#define PRIoFAST32 'lo'
#define PRIu32 'lu'
#define PRIuLEAST32 'lu'
#define PRIuFAST32 'lu'
#define PRIx32 'lx'
#define PRIxLEAST32 'lx'
#define PRIxFAST32 'lx'
#define PRIX32 'lX'
#define PRIXLEAST32 'lX'
#define PRIXFAST32 'lX'
#define PRIoPTR PRIo16
#define PRIuPTR PRIu16
#define PRIxPTR PRIx16
#define PRIXPTR PRIX16
and now the scanf side, the SCN crew π β they come bearing length modifiers like hh and h and l so your reads actually land in the right place:
#define SCNd8 'hhd'
#define SCNdLEAST8 'hhd'
#define SCNdFAST8 'hhd'
#define SCNi8 'hhi'
#define SCNiLEAST8 'hhi'
#define SCNiFAST8 'hhi'
#define SCNd16 'd'
#define SCNdLEAST16 'd'
#define SCNdFAST16 'd'
#define SCNi16 'i'
#define SCNiLEAST16 'i'
#define SCNiFAST16 'i'
#define SCNd32 'ld'
#define SCNdLEAST32 'ld'
#define SCNdFAST32 'ld'
#define SCNi32 'li'
#define SCNiLEAST32 'li'
#define SCNiFAST32 'li'
#define SCNdPTR SCNd16
#define SCNiPTR SCNi16
#define SCNo8 'hho'
#define SCNoLEAST8 'hho'
#define SCNoFAST8 'hho'
#define SCNu8 'hhu'
#define SCNuLEAST8 'hhu'
#define SCNuFAST8 'hhu'
#define SCNx8 'hhx'
#define SCNxLEAST8 'hhx'
#define SCNxFAST8 'hhx'
#define SCNo16 'o'
#define SCNoLEAST16 'o'
#define SCNoFAST16 'o'
#define SCNu16 'u'
#define SCNuLEAST16 'u'
#define SCNuFAST16 'u'
#define SCNx16 'x'
#define SCNxLEAST16 'x'
#define SCNxFAST16 'x'
#define SCNo32 'lo'
#define SCNoLEAST32 'lo'
#define SCNoFAST32 'lo'
#define SCNu32 'lu'
#define SCNuLEAST32 'lu'
#define SCNuFAST32 'lu'
#define SCNx32 'lx'
#define SCNxLEAST32 'lx'
#define SCNxFAST32 'lx'
#define SCNoPTR SCNo16
#define SCNuPTR SCNu16
#define SCNxPTR SCNx16
π§ Typedefs
Far pointers for memory access >64K β¨ (yes, actual far pointers, main character energy for your big memory):
typedef int32_t int_farptr_t
typedef uint32_t uint_farptr_t
π Author π
Generated automatically by Doxygen for avr-libc from the source code. slay, Doxygen, you did that. π€π
that's the whole page bestie, go forth and format your integers correctly π
Version 2.1.0 Β· Sat Jan 29 2022 β mwah, catch you in the next header π«Άπ
π¦ where this page comes from
- fedora 43: avr-libc 2.2.1-3.fc43 Β· BSD-3-Clause
- fedora 44: avr-libc 2.2.1-5.fc44 Β· BSD-3-Clause
- opensuse-leap 16.0: avr-libc 2.1.0-bp160.1.33 Β· BSD-3-Clause
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms