__w64 检测64位可移植性问题
__w64是种标识,用来帮助Coder发现32位程序移植到64位程序的问题。上文说,有三种类型的数值,int、long、pointer,这三类数值在32位系统里是32bit,在64位系统里是64bit。将32位程序移植到64位程序跟上面这些东西有什么关联呢?看下面的例子。
有一个变量 i0 ,不论在32位系统下,还是64位系统下,都是32bit,另一个变量 i1,在32位系统下是32bit,在64位系统下是64bit。
那么,当在32位系统下写程序时,i0 = i1 不会有问题,都是32bit;但是在同样的代码移植到64位下时,实际发生的是64bit数值赋给32bit数值,有可能丢失精度。
为了提醒Coder注意这种错误,通过/Wp64 开关来打开__w64功能,就能在32位系统中引起警告。
__w64貌似已经被VC抛弃,亲测过,目前V9仍可用。最后,这个东西,不怎么有用……但是ATL中用到了。理解这个东西有助于理解ATL代码。The end.