使用printf跨平台打印64位整数

And*_*rei 28 c printf

在Windows中,它是"%I64d".在Linux和Solaris中,它是"%lld".
如果我想编写跨平台printfs打印long long值:这样做的好方法是什么?

long long ll;
printf(???, ll);
Run Code Online (Sandbox Code Playgroud)

Dig*_*oss 41

有几种方法.

你可以用符合C99的方式编写代码,然后在编译器编写器让你失望时提供系统特定的hacks.(可悲的是,这在C99中很常见.)

#include <stdint.h>
#include <inttypes.h>

printf("My value is %10" PRId64 "\n", some_64_bit_expression);
Run Code Online (Sandbox Code Playgroud)

如果你的目标系统中的一个已经被忽视落实<inttypes.h>或已在一些其他的方式恶魔般的懈怠,因为某些类型的功能是可选的,那么你只需要一个系统特定#definePRId64(或其他)在该系统上.

另一种方法是选择当前始终实现为64位且由printf支持的内容,然后进行强制转换.不完美但通常会这样做:

printf("My value is %10lld\n", (long long)some_64_bit_expression);
Run Code Online (Sandbox Code Playgroud)