如何 printf uint64_t

我编写了 printf uint64 _ t 的一个非常简单的测试代码:

#include <inttypes.h>
#include <stdio.h>


int main()
{
uint64_t ui64 = 90;
printf("test uint64_t : %" PRIu64 "\n", ui64);
return 0;
}

我使用 ubuntu11.10(64位)和 gcc4.6.1版本来编译它,但是失败了:

main.cpp: In function ‘int main()’:
main.cpp:9:30: error: expected ‘)’ before ‘PRIu64’
main.cpp:9:47: warning: spurious trailing ‘%’ in format [-Wformat]
108768 次浏览

ISO C99标准规定,只有在显式请求时才必须定义这些宏。

#define __STDC_FORMAT_MACROS
#include <inttypes.h>


... now PRIu64 will work

在 Centos 5.x 下编译 memcached 时,我遇到了同样的问题。

解决方案是至少将 gcc 和 g + + 升级到4.4版本。

在编译之前,确保将 CC/CXX 设置(导出)为正确的二进制文件。

因为包含了 C + + 标记,所以可以使用 { fmt }库,避免 PRIu64宏和其他 printf问题:

#include <fmt/core.h>


int main() {
uint64_t ui64 = 90;
fmt::print("test uint64_t : {}\n", ui64);
}

为了在 C + + 20: P0645中实现标准化,提出了基于此库的格式化工具。

免责声明 : 我是{ fmt }的作者。