Correct way to use scanf / printf (and family) with fixed size types?

Kiril Kirov picture Kiril Kirov · Oct 17, 2012 · Viewed 7.7k times · Source

Reading this SO question, I started wondering - what is the correct way to use scanf/printf (and family) with fixed size types?

For example, if I have short int or int, I'd use %hd and %d respectively - fine.

But what if I have int16_t? short int may be different from int16_t, it's platform dependent. The same for any other fixed-size (integral) types?


NOTE: As it looks like I received some down-votes, because I "didn't try to google this", it looks like I need to explain: I didn't see similar question here, that's why I posted it. Most of the questions in SO could have been answered using Google, instead of asking here. That would make StackOverflow not the place, that it actually is now.

And NO, I didn't do this for reputation - I already hit the daily reputation cap today (having 24 up votes before posting this question).

My point is - I don't think this deserves down-votes.

Answer

Steve-o picture Steve-o · Oct 17, 2012

The correct way is to use inttypes.h which defines standard macros for printf family and the scanf family, e.g.

printf ("%" PRId16, short_int);
scanf ("%" SCNd16, &short_int);