如何在VC ++中使用_W64和__w64?

时间:2009-11-06 09:01:55

标签: c++ visual-studio visual-studio-2008 visual-c++ 64-bit

在Visual C ++ 9中有__w64这样的东西。我在尝试将原生C ++ DLL移植到64位时遇到了它。特别是在crtdefs.h中,有一个很好的片段:

#if !defined(_W64)
#if !defined(__midl) && (defined(_X86_) || defined (_M_IX86)) && _MSC_VER >= 1300
#define _W64 __w64
#else
#define _W64
#endif
#endif

如果我说得对,意味着对于64位_W64被定义为空字符串并且没有效果,但是对于32位,它被定义为__w64

我尝试将_W64定义为空字符串并依次__w64,并且至少两次项目在64位配置中编译都很好。

这说_W64__w64看起来都没用。我打算如何使用它们以及如何在64位项目中定义_W64

2 个答案:

答案 0 :(得分:9)

__w64用于标记在32位和64位环境中具有不同大小的类型。然后,当您将可能的64位类型分配给32位类型时,编译器可以发出警告。

如果您将MSDN: __w64视图切换到最新版本,则可以看到该关键字已弃用。当您尝试使用/ Wp64选项进行编译时,VC9甚至会生成警告。

答案 1 :(得分:3)

答案是,你没有。它是32位编译器使用的编译器功能。最初的想法是,微软希望为即将到来的32-> 64位转换准备程序员。因此,32位编译器获得了将某些typedef标记为__w64的能力。然后,Microsoft使用该功能标记将在Win64中更改的typedef。