Format String Macros

The <inttypes.h> file also includes the macros
that specify the printf(3S) and scanf(3S) format
specifiers. Essentially, these macros prepend the format specifier with an l or ll to identify the argument as a long or longlong, given that the number of bits in the
argument is built into the name of the macro.

There are macros for printf(3S) that print both the
smallest and largest integer types in decimal, octal, unsigned, and hexadecimal
formats as the following example shows:

int64_t i;
printf("i =%" PRIx64 "\n", i);

Similarly, there are macros for scanf(3S)that read
both the smallest and largest integer types in decimal, octal, unsigned, and
hexadecimal formats.

uint64_t u;
scanf("%" SCNu64 "\n", &u);

Do not use these macros indiscriminately. They are best used in conjunction
with the fixed-width types discussed in Fixed-Width Integer Types.