﻿# /Wp64

**/Wp64** \(Detect 64\-Bit Portability Issues\) is the key of Visual C\+\+ compiler\. The key appeared in Visual Studio 2003 and was intended for preparing migration of applications on 64\-bit systems\. In Visual Studio 2008 /Wp64 key is considered obsolete for it is high time we began to compile 64\-bit applications and not to prepare for them\.

When defining /Wp64 key the compiler detects some potential errors which can occur when compiling C/C\+\+ code for 64\-bit systems\. Test of the code consists in that the types marked by the key word [\_\_w64](https://pvs-studio.com/en/blog/terms/0053/) in 32\-bit code are interpreted as 64\-bit types during the test\.

For example, we have the following code:

```cpp
typedef int MyInt32;
#ifdef _WIN64
  typedef __int64 MySSizet;
#else
  typedef int MySSizet;
#endif
void foo() {
  MyInt32 value32 = 10;
  MySSizet size = 20;
  value32 = size;
}
```

"value32 \= size;" expression on a 64\-bit system will cause value cutoff and, consequently, to a potential error\. We want to diagnose it\. But when compiling a 32\-bit application everything is correct and we won't get a warning message\.

To prepare for 64\-bit systems we should add /Wp64 key and insert the key word \_\_w64 when defining MySSizet type in a 32\-bit version\. As the result we have the following code:

```cpp
typedef int MyInt32;
#ifdef _WIN64
  typedef __int64 MySSizet;
#else
  typedef int __w64 MySSizet; // Add __w64 keyword
#endif
void foo() {
  MyInt32 value32 = 10;
  MySSizet size = 20;
  value32 = size; // C4244 64-bit int assigned to 32-bit int
}
```

Now we'll get the warning message C4244 which will help us to prepare for porting the code on a 64\-bit platform\.

You should understand that /Wp64's abilities are rather limited\. A more detailed and specialized code test can be performed by the commercial tool [Viva64](https://pvs-studio.com/en/pvs-studio/) developed specially for simplifying port of applications on 64\-bit systems\.

## References

1. Andrey Karpov\. [64 bits, Wp64, Visual Studio 2008, Viva64 and all the rest](https://pvs-studio.com/en/blog/posts/cpp/a0021/)\.\.\.
1. MSDN\. [Option /Wp64 \(Detect 64\-Bit Portability Issues\)](https://www.microsoft.com/en-us/download/details.aspx?id=55984)\.
1. MSDN\. [Microsoft Specific keyword \_\_w64](https://www.microsoft.com/en-us/download/details.aspx?id=55984)\.
1. Andrey Karpov, Evgeniy Ryzhkov\. [Lessons on development of 64\-bit C/C\+\+ applications](https://pvs-studio.com/en/blog/lessons/)\.