Visual Studio编译器(2005到2008)为x86 / x64位环境定义了四个宏。请参阅Predefined Macros
现在在x32位机器上永远不会设置_M_X64。在64位计算机上,如果您在32位环境中构建,则将取消设置_M_X64并定义_M_IX86。无论32/64位构建如何,始终定义_WIN32。
在所有x64处理器中,_M_X64有特殊意义吗?当目标是x64时,是否存在未定义_M_X64的情况?
答案 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代码的任何编译器定义。