[英]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.