Ste*_* Lu 9 c++ macos types integer long-integer
可能重复:
如何printf uint64_t?
为什么在我的64位Mac上(我使用的是Clang)uint64_t
类型是unsigned long long
在64位Ubuntu上的uint64_t
类型是unsigned long
什么?
这使我很难接到我的printf
调用,在两种环境下都不给出编译器警告(或者甚至工作).
我可以尝试使用宏来尽量选择正确的字符串(#define LU
无论是%llu
或%lu
,并在这个过程uglifying的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
Run Code Online (Sandbox Code Playgroud)
已经为您定义了宏<cinttypes>
.尝试
printf("%"PRIu64, x);
Run Code Online (Sandbox Code Playgroud)
或者,更好的是,使用C++等功能
std::cout << x;
Run Code Online (Sandbox Code Playgroud)
这将为您的变量类型选择适当的<<运算符.
答案是通过静态强制转换来提升:
some_type i = 5;
printf("our value is: %llu", (unsigned long long)i);
Run Code Online (Sandbox Code Playgroud)