c-如何根据long的大小更改我的sprintf格式字符串



我想从包含printfscanf的十六进制字符串中读取一些uint64_t值。

并不是我使用的所有平台的longlong long大小都相同,所以如果我使用像"%llx"这样的格式字符串,它会在长128位的平台上发出警告,而"%lx"会在长64位(长更小)的平台上发出警告。

我的第一个想法是用宏定义格式字符串,但在宏表达式中不支持sizeof。

有没有一种方法可以定义我的格式字符串,使其在任何平台上都能工作,最好没有警告?

uint64_t的格式字符串由宏PRIu64 定义

例如:

uint64_t foo = 0;
printf("%" PRIu64 "n", foo);

类似的格式字符串存在于scanf,在本例中为SCNu64。这些是<inttypes.h>中定义的宏。

最新更新