Как правильно распечатать значение типа __int64, size_t и ptrdiff_t
- 1. Использовать безопасные методы
- 2. Использовать корректную форматную строку
- Библиографический список
Часто при разработке программы можно столкнуться с тем, что переменные типа __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:

Библиографический список
- Уроки разработки 64-битных приложений на языке Си/Си++. Урок 10. Паттерн 2. Функции с переменным количеством аргументов.
- Wikipedia. Printf.
- Андрей Карпов. Что такое size_t и ptrdiff_t.
- База знаний. Отличие %p от %x.
0