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

Visual Studio编译器(2005年至2008年)为x86 / x64位环境定义了四个macros。 请参阅预定义的macros

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

现在在一个x32位的机器_M_X64永远不会被设置。 在一个64位的机器上,如果你正在build立一个32位的环境_M_X64将被取消设置,_M_IX86将被定义。 _WIN32总是被定义,而不pipe32/64位构build。

在所有x64处理器中,_M_X64有特殊意义吗? 如果目标是x64,_M_X64未定义,那么是否会出现这种情况?

现在在一个x32位的机器_M_X64永远不会被设置

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

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

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