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:

Picture 1

References



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

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;



Do you make errors in the code?

Check your code
with PVS-Studio

Static code analysis
for C, C++, and C#

goto PVS-Studio;