The printf
and scanf
families of functions in C consume a handful of primitive format specifiers that correspond to the fundamental data types –
Posix guarantees that sys/types.h values are an "arithmetic type of appropriate length" with a few others as being further specified as unsigned or signed 'extended length'. The only standards-acceptable way to output those would be to transfer it via cast in the largest appropriate language type (u)intmax_t and then output that.
Inputting them would be more dangerous (i.e., not possible in a standards-compliant fashion) as it would be difficult to guarantee your conversion to the base type didn't overflow something.