我正在试图弄清楚我对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}}部分是必要的?
答案 0 :(得分:5)
该文档适用于Visual Studio 6.0。 Visual Studio 6.0于1998年发布,它在任何long long
标准化之前发布,并且不支持它。它确实支持您在文档中看到的__int64
,因此可以无条件地使用 ,但是对_INTEGRAL_MAX_BITS
的检查可能是为了更老的版本获得更好的错误消息Visual Studio。 “不支持__int64类型”是一个有用的错误消息。 “意外令牌'int64'之前的语法错误”不是一个有用的错误消息。