在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>或已在一些其他的方式恶魔般的懈怠,因为某些类型的功能是可选的,那么你只需要一个系统特定#define的PRId64(或其他)在该系统上.
另一种方法是选择当前始终实现为64位且由printf支持的内容,然后进行强制转换.不完美但通常会这样做:
printf("My value is %10lld\n", (long long)some_64_bit_expression);
Run Code Online (Sandbox Code Playgroud)