是否可以在x64处理器上取消设置_M_X64?

时间:2012-08-24 13:04:59

标签: c++ windows visual-studio

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

  • _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的情况?

1 个答案:

答案 0 :(得分:6)

  

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

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

您可以在计算机上安装这些编译器,VS安装目录的vc\bin子目录。该目录包含一个生成x86代码的32位编译器。 x86_amd64子目录具有一个生成x64代码的32位编译器。 amd64子目录有一个64位编译器,可生成x64代码。如果您有ARM内核的编译器,那里可能存在其他目录。哪些都是交叉编译器。

您询问的宏名称是预定义的宏,完整列表is here。 _M_X64宏总是由生成x64代码的任何编译器定义。