我正在查看内置宏的MSVC文档,并看到了以下宏:
_M_AMD64定义为针对x64处理器的编译的整数字面值100。否则,未定义。
_M_X64定义为针对x64处理器的编译的整数字面值100。否则,未定义。
此外,还有以下宏似乎也这样做?
_WIN64当编译目标是64位ARM或x64时定义为1。否则,未定义。
根据文档,它们都具有完全相同的定义 - 它们是否相同?是否有任何情况会定义一个而另一个不定义?如果没有,这里的历史是什么?
答案 0 :(得分:3)
_WIN64在sizeof(void*) >= 8
第一个64位Windows版本(“Windows XP 64位版本”)实际上是在Intel Itanium CPU上,其宏是_M_IA64。 AMD然后决定创建他们自己的64位指令集,它的宏是_M_AMD64,但是它的第一个桌面Windows版本实际上被称为“Windows XP Professional x64 Edition”。英特尔陷入困境并开始生产支持AMD64指令集(EM64T AKA Intel 64)的CPU,现在Itanium已经死了。
您仍会在某些地方和文件名中看到AMD64名称,但很多人现在只称它为x64或x86-64。
_M_AMD64自该架构开始以来就已存在,但我不记得是否同时创建了_M_X64,或者是否稍后添加了_M_X64。您可能需要查看Visual Studio 2003和2005之间发布的Platform SDK和WDK中的编译器以查找。
_M_AMD64和_M_X64是等效的。