正确使用具有固定大小类型的scanf / printf(和系列)的方法?
阅读这个SO问题 ,我开始想知道 – 使用具有固定大小类型的scanf
/ printf
(和系列)的正确方法是什么?
例如,如果我有short int
或int
,我分别使用%hd
和%d
– 很好。
但是如果我有int16_t
怎么int16_t
? short 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);