2

我想用和uint64_t从十六进制字符串中读取一些值。printfscanf

并非我使用的所有平台都具有相同的longor大小long long,所以如果我使用格式字符串,"%llx"它会在 long long 为 128 位"%lx"的平台上发出警告,并且会在 long long 为 64 位的平台上发出警告(并且 long 更小) )。

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

有没有办法定义我的格式字符串,以便它可以在任何平台上工作,最好没有警告?

4

1 回答 1

5

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

例如:

uint64_t foo = 0;

printf("%" PRIu64 "\n", foo);

scanf在这种情况下,存在类似的格式字符串SCNu64。这些是定义在<inttypes.h>.

于 2014-09-11T07:52:39.767 回答