Our website uses cookies to enhance your browsing experience.
Accept
to the top
close form

Fill out the form in 2 simple steps below:

Your contact information:

Step 1
Congratulations! This is your promo code!

Desired license type:

Step 2
Team license
Enterprise license
** By clicking this button you agree to our Privacy Policy statement
close form
Request our prices
New License
License Renewal
--Select currency--
USD
EUR
* By clicking this button you agree to our Privacy Policy statement

close form
Free PVS‑Studio license for Microsoft MVP specialists
* By clicking this button you agree to our Privacy Policy statement

close form
To get the licence for your open-source project, please fill out this form
* By clicking this button you agree to our Privacy Policy statement

close form
I am interested to try it on the platforms:
* By clicking this button you agree to our Privacy Policy statement

close form
check circle
Message submitted.

Your message has been sent. We will email you at


If you haven't received our response, please do the following:
check your Spam/Junk folder and click the "Not Spam" button for our message.
This way, you won't miss messages from our team in the future.

/Wp64

Mar 31 2013

/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 in 32-bit code are interpreted as 64-bit types during the test.

For example, we have the following code:

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:

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 developed specially for simplifying port of applications on 64-bit systems.

References

Popular related articles


Comments (0)

Next comments next comments
close comment form