在 C++11 中可移植地打印 std::uint64_t 变量的格式说明符
Format specifier to portably print std::uint64_t variable in C++11
使用 C++ 中 std::printf()
系列的函数打印类型 std::uint64_t
(来自 <cstdint>
)的值的格式说明符是什么?
C99 有 PRIu64
(来自 <inttypes.h>
),但我并不完全清楚 PRIu64
是有效的 C++11,尽管我可以找到它可能是的提示。
如果没有 PRIu64
,据我所知,没有适用于所有情况的单一格式说明符:
- 在 32 位平台上,
std::uint64_t
将被定义为 unsigned long long
,格式说明符将为 %llu
.
- 在 64 位平台上,
std::uint64_t
将被定义为 unsigned long
,格式说明符将为 %lu
.
- 但是对于 Visual Studio,
%llu
在这两种情况下都有效。
PRIu64
仍然是您将在 C++ 中使用的内容。每 [cinttypes.syn] PRIu64
[...]
#define PRIuN see below
[...]
The contents and meaning of the header <cinttypes>
are the same as the C standard library header <inttypes.h>
[...]
因此它存在并且具有与 C ISO/IEC 9899:2011 标准中相同的行为。
使用 C++ 中 std::printf()
系列的函数打印类型 std::uint64_t
(来自 <cstdint>
)的值的格式说明符是什么?
C99 有 PRIu64
(来自 <inttypes.h>
),但我并不完全清楚 PRIu64
是有效的 C++11,尽管我可以找到它可能是的提示。
如果没有 PRIu64
,据我所知,没有适用于所有情况的单一格式说明符:
- 在 32 位平台上,
std::uint64_t
将被定义为unsigned long long
,格式说明符将为%llu
. - 在 64 位平台上,
std::uint64_t
将被定义为unsigned long
,格式说明符将为%lu
. - 但是对于 Visual Studio,
%llu
在这两种情况下都有效。
PRIu64
仍然是您将在 C++ 中使用的内容。每 [cinttypes.syn] PRIu64
[...]
#define PRIuN see below
[...]
The contents and meaning of the header
<cinttypes>
are the same as the C standard library header<inttypes.h>
[...]
因此它存在并且具有与 C ISO/IEC 9899:2011 标准中相同的行为。