【问题标题】:How do I use _W64 and __w64 in VC++?如何在 VC++ 中使用 _W64 和 __w64?
【发布时间】:2009-11-06 09:01:55
【问题描述】:

在 Visual C++ 9 中有 __w64 这样的东西。我在尝试将我的原生 C++ DLL 移植到 64 位时遇到了它。特别是在crtdefs.h 有这个不错的sn-p:

#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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      答案是,你不知道。这是 32 位编译器使用的编译器功能。最初的想法是微软想让程序员为即将到来的 32->64 位转换做好准备。因此,32 位编译器获得了将某些 typedef 标记为 __w64 的能力。然后,Microsoft 使用该功能标记在 Win64 中会发生变化的 typedef。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-03
        • 2011-05-28
        • 2016-05-15
        • 2013-12-20
        • 2010-09-25
        • 1970-01-01
        相关资源
        最近更新 更多