Visual Studio编译器(2005年至2008年)为x86 / x64位环境定义了四个macros。 请参阅预定义的macros
现在在一个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代码的编译器定义的。