inttypes.h(3)

πŸ“¦ version 2.2.1, in fedora 43, fedora 44, opensuse-leap 16.0

🌸 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_MACROS is 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