【发布时间】:2012-08-24 13:04:58
【问题描述】:
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 是否有特殊意义?当target为x64时,会不会出现_M_X64未定义的情况?
【问题讨论】:
-
这些宏是否依赖于编译器运行的机器?还是取决于编译程序将运行的目标?这很重要,因为我不明白您的陈述“现在在 x32 位机器上”。恕我直言,这些宏只依赖于 target。而且你可以在 32 位系统上编译 64 位目标,正如相反的情况一样..
-
@DidierTrosset:如果我没记错的话,32 位机器 (x32) 无法为 64 位目标构建程序,所以我相信在此类机器上 _M_X64 将始终未定义。
-
@Abhijit:32 位系统可以轻松构建 64 位代码。而且我这里的 64 位笔记本电脑可以为至少六种不同的处理器架构(PPC、PPC64、i386、x86_64、ARMv6 和 ARMv7)构建代码。构建系统的架构与生成的代码。
标签: c++ windows visual-studio