Как правильно распечатать значение типа __int64, size_t и ptrdiff_t


Часто при разработке программы можно столкнуться с тем, что переменные типа __int64, size_t или ptrdiff_t некорректно выводятся на печать. Прежде всего, стоит упомянуть различие между этими типами данных. Так тип __int64 на 32-битной и 64-битной платформах всегда имеет размер 64 бита. Типы size_t и ptrdiff_t на 32-битной - 32 бита, а на 64-битной - 64 бита. Именно отсюда и возникает путаница и проблемы с распечаткой значений переменных этих типов.

Устранить проблему можно несколькими путями:

1. Использовать безопасные методы

Например, можно заменить printf на cout, а sprintf на boost::format или std::stringstream.

2. Использовать корректную форматную строку

а) Для типа __int64 независимо от типа компилятора (C++Builder, MSVC или GCC):

printf("%lld", i);

б) Для типов size_t и ptrdiff_t:

Picture 2

Библиографический список



Найдите ошибки в своем C, C++, C# и Java коде

Предлагаем попробовать проверить код вашего проекта с помощью анализатора кода PVS-Studio. Одна найденная в нём ошибка скажет вам о пользе методологии статического анализа кода больше, чем десяток статей.

goto PVS-Studio;



Найденные ошибки

Проверено проектов
343
Собрано ошибок
12 850

А ты совершаешь ошибки в коде?

Проверь с помощью
PVS-Studio

Статический анализ
кода для C, C++, C#
и Java

goto PVS-Studio;