Часто при разработке программы можно столкнуться с тем, что переменные типа __int64, size_t или ptrdiff_t некорректно выводятся на печать. Прежде всего, стоит упомянуть различие между этими типами данных. Так тип __int64 на 32-битной и 64-битной платформах всегда имеет размер 64 бита. Типы size_t и ptrdiff_t на 32-битной - 32 бита, а на 64-битной - 64 бита. Именно отсюда и возникает путаница и проблемы с распечаткой значений переменных этих типов.
Устранить проблему можно несколькими путями:
Например, можно заменить printf на cout, а sprintf на boost::format или std::stringstream.
а) Для типа __int64 независимо от типа компилятора (C++Builder, MSVC или GCC):
printf("%lld", i);
б) Для типов size_t и ptrdiff_t: