如果你想使用inttypes.h中的
int32_t
,
int64_t
,
uint64_t
等資料類型,如何對其進行printf是需要仔細考慮的。
在32位平台和64位平台對uint64_t的定義是不同的:
32位平台: typedef unsigned long long int uint64_t; 64位平台: typedef unsigned long int uint64_t;
是以,在這兩種平台裡printf 一個 uint64_t的變量時就會遇到問題,是選擇%llu 還是 %lu就成為了一個問題。 這時候,我們就需要使用inttypes.h中定義的配套宏進行正确的printf。
#define __STDC_FORMAT_MACROS //如果是C++,還需要包括這個宏
#include <inttypes.h> // now PRIu64 will work
#include <stdio.h>
int main()
{
uint64_t x;
uint32_t y;
printf("x: %"PRId64", y: %"PRId32"\n", x, y);
return 0;
}