正确使用具有固定大小类型的scanf / printf(和系列)的方法?

阅读这个SO问题 ,我开始想知道 – 使用具有固定大小类型的scanf / printf (和系列)的正确方法是什么?

例如,如果我有short intint ,我分别使用%hd%d – 很好。

但是如果我有int16_t怎么int16_tshort int可能与int16_t不同,它取决于平台。 任何其他固定尺寸(整体)类型都一样吗?


注意:因为看起来我收到了一些向下投票,因为我“ 没有尝试谷歌这个 ”,看起来我需要解释:我没有在这里看到类似的问题,这就是我发布它的原因。 SO中的大部分问题都可以通过谷歌回答,而不是在这里询问。 那将使StackOverflow成为现实,它实际上就是现在。

不,我没有这样做是为了声誉 – 我已经达到了今天的每日声望上限(在发布此问题之前有24票)。

我的观点是 – 我认为这不值得投票。

正确的方法是使用inttypes.h ,它定义了printf系列和scanf系列的标准宏,例如

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

inttypes.h头文件包含定义stdint.h中定义的固定宽度整数的正确格式说明符的宏。 例如, printf()int16_t的类型说明int16_t是名为PRId16的宏。 例:

 int16_t x; scanf("%" SCNd16, &x); printf("You have entered: %" PRId16 "\n", x);