格式'%lld'期望类型为long long int',但是参数4的类型为' int64_t'

时间:2015-07-21 08:54:28

标签: c linux

我尝试使用int64_t格式说明符打印%lld类型的变量,但是会收到以下警告?

  

警告:格式'%lld'期望类型为#long long int',但是参数为4   有类型' int64_t'

在我看来,在linux下,int64_t总是long long int,然后:

  1. 为什么会出现此警告?
  2. 我该如何解决这个问题?

1 个答案:

答案 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

因此,请将此警告视为可移植性问题警告。

相关问题