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

时间:2014-11-18 22:10:10

标签: c++ windows

我正在试图弄清楚我对Windows宏_INTEGRAL_MAX_BITS的期望值 MSDN的__int64 documentation表示,只要使用__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

为什么我会看到INTEGRAL_MAX_BITS的值低于32? this question中的答案显示,在32位Windows上,long long为64位。 VS2013 documentation表示

  

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

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

1 个答案:

答案 0 :(得分:5)

该文档适用于Visual Studio 6.0。 Visual Studio 6.0于1998年发布,它在任何long long标准化之前发布,并且不支持它。它确实支持您在文档中看到的__int64,因此可以无条件地使用 ,但是对_INTEGRAL_MAX_BITS的检查可能是为了更老的版本获得更好的错误消息Visual Studio。 “不支持__int64类型”是一个有用的错误消息。 “意外令牌'int64'之前的语法错误”不是一个有用的错误消息。