格式化说明符以在C ++ 11中可移植地打印std :: uint64_t变量

时间:2019-05-16 16:23:06

标签: c++ c++11 printf portability

使用C ++中std::uint64_t系列的函数来打印<cstdint>类型(来自std::printf())的值的格式说明符是什么?

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在两种情况下均有效。

1 个答案:

答案 0 :(得分:12)

PRIu64仍然是C ++中要使用的语言。每个[cinttypes.syn] PRIu64

  

[...]

#define PRIuN see below
     

[...]

     

头文件<cinttypes>的内容和含义与C标准库头文件<inttypes.h> [...]

因此它存在并且具有与C ISO / IEC 9899:2011标准相同的行为。