可能的重复:
如何打印uint64_t?
为什么在我的 64 位 Mac(我使用的是 Clang)上uint64_t
类型是unsigned long long
而在 64 位 Ubuntu 上uint64_t
类型是unsigned long
?
这让我很难得到我的printf
在这两种环境下调用不给出编译器警告(甚至不工作)。
我可以尝试使用宏来尝试选择正确的字符串(#define LU
either %llu
or %lu
,并在这个过程中丑化了printf
字符串一点)但在 Mac 上我有一个 64 位字大小(所以_LP64
将被定义并且UINTPTR_MAX != 0xffffffff
)但它仍然使用long long
对于 64 位 int 类型。
// printf macro switch (for the uint64_t's)
#if UINTPTR_MAX == 0xffffffff
// 32-bit
# define LU "%llu"
#else
// assume 64-bit
// special case for OS X because it is strange
// should actually check also for __MACH__
# ifdef __APPLE__
# define LU "%llu"
# else
# define LU "%lu"
# endif
#endif
宏已经为您定义了<cinttypes>
. Try
printf("%"PRIu64, x);
或者,更好的是,使用 C++ 功能,例如
std::cout << x;
这将为您的变量类型选择正确的
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)