﻿# Как правильно распечатать значение типа \_\_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\):

```cpp
printf("%lld", i);
```

б\) Для типов size\_t и ptrdiff\_t:

![k0046_How_to_print__int64_ru/image1.png](https://import.viva64.com/docx/blog/k0046_How_to_print__int64_ru/image1.png)

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

1. Уроки разработки 64\-битных приложений на языке Си/Си\+\+\. [Урок 10\. Паттерн 2\. Функции с переменным количеством аргументов](https://pvs-studio.ru/ru/blog/lessons/0010/)\. 
1. Wikipedia\. [Printf](https://ru.wikipedia.org/wiki/Printf)\.
1. Андрей Карпов\. [Что такое size\_t и ptrdiff\_t](https://pvs-studio.ru/ru/blog/posts/cpp/a0050/)\.
1. База знаний\. [Отличие %p от %x](https://pvs-studio.ru/ru/blog/posts/cpp/k0019/)\.