2

Visual Studio 编译器(2005 到 2008)为 x86/x64 位环境定义了四个宏。参考预定义宏

  • _M_X64 为 x64 处理器定义。
  • _M_IX86 为 x86 处理器定义。有关详细信息,请参阅下表 _M_IX86 的值。这不是为 x64 处理器定义的。
  • _WIN32 为 Win32 和 Win64 的应用程序定义。始终定义。
  • _WIN64 为 Win64 应用程序定义。

现在在 x32 位机器上永远不会设置 _M_X64。在 64 位机器上,如果您在 32 位环境上构建,_M_X64 将被取消设置,_M_IX86 将被定义。无论 32/64 位版本如何,总是定义 _WIN32。

在所有 x64 处理器中,_M_X64 是否有特殊意义?当目标为 x64 时,_M_X64 未定义是否会出现这种情况?

4

1 回答 1

7

现在在 x32 位机器上永远不会设置 _M_X64

这不是它的工作原理。您使用的编译器为特定的目标架构生成代码,它不关心您的机器。在 32 位机器上生成 x64 代码是非常有可能的,MSVC 包含一个可以在 32 位操作系统上运行并生成 x64 代码的交叉编译器。它有一个 64 位编译器,可以生成 x64 代码。IDE 设置为实际使用交叉编译器,无论您的操作系统如何。

你可以看到这些编译器安装在你的机器上,vc\binVS安装目录的子目录。该目录包含生成 x86 代码的 32 位编译器。x86_amd64 子目录有一个生成 x64 代码的 32 位编译器。amd64 子目录有一个生成 x64 代码的 64 位编译器。如果您有 ARM 内核的编译器,则可能存在其他目录。始终是交叉编译器。

您询问的宏名称是预定义的宏,完整列表在这里。_M_X64 宏始终由生成 x64 代码的任何编译器定义。

于 2012-08-24T14:09:33.023 回答