![](/img/trans.png)
[英]warning: format ‘%llx’ expects argument of type ‘long long unsigned int *’, but argument 3 has type ‘off64_t *’ [-Wformat]
[英]format '%lld' expects type 'long long int', but argument 4 has type 'int64_t'
我尝试使用%lld
格式说明符打印int64_t
类型的变量,但得到以下警告?
警告:格式'%lld'需要类型'long long int',但参数4的类型为'int64_t'
在我看来,在linux下, int64_t
总是long long int
,然后:
怎么修?
使用PRId64
:(不要忘记包含<inttypes.h>
)
printf("var64 = %" PRId64 "\n", var64);
如果要将其打印为十六进制,请使用PRIx64
和正确的PRIx64
。
int64_t
总是long long int
,那为什么会出现这个警告呢?
从C99开始( 链接到草稿 ,第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 。
因此,将此警告视为可移植性问题警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.