我尝试使用int64_t
格式说明符打印%lld
类型的变量,但是会收到以下警告?
警告:格式'%lld'期望类型为#long long int',但是参数为4 有类型' int64_t'
在我看来,在linux下,int64_t
总是long long int
,然后:
答案 0 :(得分:19)
如何解决?
使用PRId64
:(不要忘记包含<inttypes.h>
)
printf("var64 = %" PRId64 "\n", var64);
如果要将其打印为十六进制,请使用PRIx64
和正确的演员。
int64_t
始终为long long int
,那为什么会出现此警告?
C99起(link to draft,第22页),C规格建议类型long long int
应至少 64位,但也可能更多。
- long long int
LLONG_MIN类型的对象的最小值 -9223372036854775807 // - (2 63 -1)
- long long int类型对象的最大值
LLONG_MAX +9223372036854775807 // 2 63 - 1
在某些平台上,long long int
可能是128位,而print语句在这些平台上调用UB。
因此,请将此警告视为可移植性问题警告。