为什么INTEGRAL_MAX_BITS会返回小于64的值?

Tes*_*mas 3 c++ windows

我正在试图弄清楚我对Windows宏可以期待什么值_INTEGRAL_MAX_BITS.
MSDN的__int64文档说每次使用时都应该使用此代码__int64

#if defined (_INTEGRAL_MAX_BITS) && \
      _INTEGRAL_MAX_BITS >= 64
    typedef signed __int64 int64;
    typedef unsigned __int64 uint64;
#else
    #error __int64 type not supported
#endif
Run Code Online (Sandbox Code Playgroud)

为什么我会看到低于32的值INTEGRAL_MAX_BITS这个问题的答案 表明,在32位Windows上,a long long是64位. VS2013文档说明了这一点

_INTEGRAL_MAX_BITS - 将整数类型的最大大小(以位为单位)报告为整数文字.

由于long long是一个整数类型,即使在32位Windows上,应该返回的最低值是64位,对吧?
为什么必要的_INTEGRAL_MAX_BITS >= 64部分#if

小智 5

该文档适用于Visual Studio 6.0.Visual Studio 6.0于1998年发布,在任何long long标准化之前,它都不支持它.它确实支持__int64你在文档中看到的,因此可以无条件地使用它,但可能检查_INTEGRAL_MAX_BITS是为了获得更好的错误消息,即使是旧版本的Visual Studio也是如此."不支持__int64类型"是一个有用的错误消息.像"意外令牌'int64'之前的语法错误"之类的东西不是有用的错误消息.