【发布时间】:2019-05-16 16:23:06
【问题描述】:
在 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在这两种情况下都有效。
【问题讨论】:
-
在 64 位平台上,std::uint64_t 将被定义为 unsigned long,格式说明符将为 %lu。 这仅适用于 *nix 系统. Windows 在 64 位系统中仍然使用 32 位长。
-
<cinttypes>如果我没记错的话也应该有那个宏。编辑:cppreference 验证它。 -
@NathanOliver 确实,因为 Windows 是 LLP64,因此为什么
%llu始终是 Visual Studio 的正确说明符。 -
@rustyx 我发布这个问题正是因为
%llu并不总是有效。 -
可能相关,甚至可能被骗:stackoverflow.com/questions/8132399/…
标签: c++ c++11 printf portability