How to correctly print a value of the types __int64, size_t, and ptrdiff_t

When developing an application, you may often face a trouble that variables of the types __int64, size_t, or ptrdiff_t are printed incorrectly. First of all we should mention the difference between these data types. The __int64 type, for instance, always has the size 64 bits both on the 32-bit and 64-bit platforms. The types size_t and ptrdiff_t are 32-bit on the 32-bit platform and 64-bit on the 64-bit platform. It is this point that causes troubles and confusion when printing values of these types.

There are two ways to eliminate the problem:

1. Using safe methods

For example, you can replace printf with cout, and sprintf with boost::format or std::stringstream.

2. Using a correct format string

a) For the __int64 type, regardless of the compiler (C++Builder, MSVC, or GCC):

printf("%lld", i);

b) For the types size_t and ptrdiff_t:


Use PVS-Studio to search for bugs in C, C++, C# and Java

We offer you to check your project code with PVS-Studio. Just one bug found in the project will show you the benefits of the static code analysis methodology better than a dozen of the articles.

goto PVS-Studio;

Bugs Found

Checked Projects
Collected Errors
13 764