2014-09-05 69 views
1

根据MSDN文档的Visual Studio 2012,streamsize可被定义如下:的sizeof(streamsize可)使用Visual Studio 2012

#ifdef _WIN64 
    typedef __int64 streamsize; 
#else 
    typedef int streamsize; 
#endif 

然而检查实际源iosfwd定义似乎是如下(注意没有条件):

typedef _Longlong streamsize; 

这导致的sizeof(streamsize可)在Visual Studio 2012

返回8个字节无论_WIN64定义的在Visual苏迪o 2008比较在iosfwd中有以下定义:

#ifdef _WIN64 
typedef __int64 streamoff; 
typedef __int64 streamsize; 

#else /* _WIN64 */ 
typedef long streamoff; 
typedef int streamsize; 
#endif /* _WIN64 */ 

注意代码与文档匹配。

鉴于这一信息,我的问题是两个部分如下:

1)是MSDN文档streamsize可在错误的Visual C++ 2012?

2.)更大的问题:32位应用程序的真正向后兼容性是否缓慢下降?

谢谢!

+0

MSVC总是会破坏主要版本之间的二进制兼容性。 – 2014-09-05 02:49:32

回答

0

我已经看到很多情况下(MSDN和其他地方),它看起来像版本X文档刚刚被复制向前发布X + 1,没有任何更改。允许64位的更新似乎发生在VS2005/2008转换中,即使VS2013仍具有与VS2008相同的文本。

如果文档和代码不同意,那是代码这是正确的,因为这就是编译的内容。

根据您的问题,只有微软知道这一点。然而,随着时间的推移,放弃对早期系统的支持是很自然的。除IBM的大型机之外,我不知道任何人谁已经做得更多,以允许向后兼容比微软,但他们甚至不得不在某处绘制线。

例如(从内存),Visual C++ 1.52c是最后一个能够发出16位代码的编译器,因为一旦NT流从98接管(忘记现在是ME的流产),那里是没有必要的。

MS尽最大努力确保Windows仍然 16位代码,但没有真正的欲望不断 16位代码。

这里很可能是同样的情况,32位holdouts降级到VS的早期版本,但我们不能肯定地说。谁知道MS高管们心中潜藏着什么邪恶? :-)