我想从包含printf
和scanf
的十六进制字符串中读取一些uint64_t
值。
并不是我使用的所有平台的long
或long long
大小都相同,所以如果我使用像"%llx"
这样的格式字符串,它会在长128位的平台上发出警告,而"%lx"
会在长64位(长更小)的平台上发出警告。
我的第一个想法是用宏定义格式字符串,但在宏表达式中不支持sizeof。
有没有一种方法可以定义我的格式字符串,使其在任何平台上都能工作,最好没有警告?
uint64_t
的格式字符串由宏PRIu64
定义
例如:
uint64_t foo = 0;
printf("%" PRIu64 "n", foo);
类似的格式字符串存在于scanf
,在本例中为SCNu64
。这些是<inttypes.h>
中定义的宏。