【问题标题】:Should I define both _WIN32 and _WIN64 in 64bit build?我应该在 64 位版本中同时定义 _WIN32 和 _WIN64 吗?
【发布时间】:2011-10-04 11:55:27
【问题描述】:

当我们从已经存在的 32 位项目中添加 64 位配置时,Visual Studio 默认会复制 32 位配置。 VS 甚至复制 _WIN32
我所有的 64 位项目现在也定义了 _WIN32,尽管它们(64 位 PE)永远不能在 32 位 Windows 上运行。这对我来说很不舒服。

如果没有任何问题,我想删除 _WIN32。我不确定。
如果我删除 _WIN32 定义可以吗?

【问题讨论】:

  • 可以吗?不知道。你的目标是什么?
  • 您只想知道是否可以删除,但您没有提供有关应用程序应该执行的位置的足够详细信息(它会在 32 位上运行吗?是吗?不是吗?)什么问题删除会解决吗?

标签: windows visual-studio visual-c++ configuration 32bit-64bit


【解决方案1】:

_WIN32 并不代表你认为的那样。这意味着“我正在使用 Windows API”。 32 后缀是在 Windows NT 3.1 时代添加的,以使其与 Windows 版本 3 中使用的 16 位 API 不同。由于位数问题,这个术语已经失宠。你可以在 stackoverflow.com 看到这个,[win32] 标签带你到 [winapi]。

不要删除它,您正在使用 Windows API。

【讨论】:

    【解决方案2】:

    predefined macros 的文档说:

    _WIN32: 为 Win32 和 Win64 的应用程序定义。始终定义。

    _WIN64:为 Win64 应用程序定义。

    所以不仅应该定义_WIN32always,它不会在 64 位应用程序中造成任何问题。因此,我建议您不要删除它。

    【讨论】:

      【解决方案3】:

      你不应该定义它们中的任何一个。

      工具链(编译器 + 系统头文件)将酌情定义它们。

      【讨论】:

      • 我认为这在技术上是不正确的——MSVC 编译器总是定义 _WIN32,它不定义 WIN32,除非它的输入告诉它,例如/DWIN32 选项。许多项目(告诉编译器)定义 WIN32,但这是项目的决定,而不是编译器的决定。
      • @Spike0xff:好点,并非所有系统宏都必须在编译器二进制文件本身中预定义。希望此编辑使答案更准确。 (另一方面,问题和答案是关于_WIN32而不是WIN32,关于_WIN64而不是WIN64
      • 关于 OP 的好点子!很棒的编辑,我推翻了我的投票。 (顺便说一下你的个人资料声明中的道具 ;-)
      【解决方案4】:

      _WIN32:为Win32和Win64的应用程序定义。始终定义。

      _WIN64:为Win64应用定义。

      更多详情:Predefined Macros

      简单来说,WIN32/_WIN32是用来判断你使用的是Windows(跨系统应用),_WIN64是用来判断编译环境是x86还是x64。

      如果您想知道您的应用程序是否在 Windows x64 下运行,您应该使用 Windows API IsWow64Process

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-02-05
        • 2017-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-16
        • 1970-01-01
        • 2015-03-09
        相关资源
        最近更新 更多