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

sha*_*oth 5 c++ 64-bit visual-studio-2008 visual-studio visual-c++

在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
Run Code Online (Sandbox Code Playgroud)

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

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

这就是说两个_W64__w64看起来无用.我打算如何使用它们以及如何_W64在64位项目中定义?

Tim*_*mbo 9

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

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


MSa*_*ers 4

答案是,你不知道。它是供 32 位编译器使用的编译器功能。最初的想法是 Microsoft 希望让程序员为即将到来的 32->64 位过渡做好准备。因此,32 位编译器能够将某些 typedef 标记为 __w64。然后,Microsoft 使用该功能来标记将在 Win64 中更改的 typedef。