在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
?
答案 0 :(得分:9)
__w64
用于标记在32位和64位环境中具有不同大小的类型。然后,当您将可能的64位类型分配给32位类型时,编译器可以发出警告。
如果您将MSDN: __w64视图切换到最新版本,则可以看到该关键字已弃用。当您尝试使用/ Wp64选项进行编译时,VC9甚至会生成警告。
答案 1 :(得分:3)
答案是,你没有。它是32位编译器使用的编译器功能。最初的想法是,微软希望为即将到来的32-> 64位转换准备程序员。因此,32位编译器获得了将某些typedef标记为__w64的能力。然后,Microsoft使用该功能标记将在Win64中更改的typedef。