我想从带有uint64_t
和printf
的十六进制字符串中读取一些scanf
值。
并非我使用的所有平台都具有相同的long
或long long
大小,因此,如果我使用类似"%llx"
的格式字符串,则会在长长的平台上发出警告128位和"%lx"
将在长长度为64位(长度较小)的平台上发出警告。
我的第一个想法是用宏定义格式字符串,但宏表达式不支持sizeof。
有没有办法定义我的格式字符串,以便它可以在任何平台上运行,最好没有警告?
答案 0 :(得分:5)
uint64_t
的格式字符串由宏PRIu64
例如:
uint64_t foo = 0;
printf("%" PRIu64 "\n", foo);
scanf
存在类似的格式字符串,在本例中为SCNu64
。这些是<inttypes.h>
中定义的宏。