Спецификатор формата для переносной печати переменной std :: uint64_t в C ++ 11 - PullRequest
4 голосов
/ 16 мая 2019

Что такое спецификатор формата для печати значения типа std::uint64_t (из <cstdint>) с использованием функций из семейства std::printf() в C ++?

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 Ответ

13 голосов
/ 16 мая 2019

PRIu64 - это все еще то, что вы будете использовать в C ++.За [cinttypes.syn] PRIu64

[...]

#define PRIuN see below

[...]

содержимое и значение заголовка <cinttypes> совпадают с заголовком стандартной библиотеки C <inttypes.h> [...]

Таким образом, он существует и имеет то же поведение, что и в C ISO/ IEC 9899: 2011 стандарт.

...