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