【问题标题】:sizeof(streamsize) using Visual Studio 2012使用 Visual Studio 2012 的 sizeof(streamsize)
【发布时间】:2014-09-05 02:37:37
【问题描述】:

根据 Visual Studio 2012 的 MSDN 文档,streamsize 定义如下:

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

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

typedef _Longlong streamsize;

这会导致 sizeof(streamsize) 返回 8 个字节,无论 Visual Studio 2012 中的 _WIN64 定义如何。

相比之下,在 Visual Sudio 2008 中,在 iosfwd 中有以下定义:

#ifdef _WIN64
typedef __int64 streamoff;
typedef __int64 streamsize;

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

注意代码与文档匹配。

鉴于此信息,我的问题分为两部分:

1.) 对于 Visual C++ 2012,streamsize 的 MSDN 文档是否出错?

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

谢谢!

【问题讨论】:

  • MSVC 总是会破坏主要版本之间的二进制兼容性。

标签: c++ visual-studio-2012 types typedef sizeof


【解决方案1】:

我见过很多案例(MSDN 和其他地方),其中看起来就像发布 X 的文档刚刚被复制到发布 X + 1 中,没有任何更改。允许 64 位的更新似乎发生在 VS2005/2008 转换时,即使 VS2013 仍然具有与 VS2008 相同的文本。

如果文档和代码不一致,那代码才是正确的,因为那是被编译的。

就您的第二个问题而言,只有 Microsoft 知道。但是,随着时间的推移,放弃对早期系统的支持是很自然的。除了 IBM 的大型机,我不知道有谁比微软在向后兼容方面做得更多,但即使他们也必须在某个地方划清界限。

例如(从内存中),Visual C++ 1.52c 是最后一个能够生成 16 位代码的编译器,因为一旦 NT 流从 98 接管(忘记现在的中止),就会有没必要。

MS 尽最大努力确保 Windows 仍然运行 16 位代码,但并没有真正希望继续制作新 16 位代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-07
    • 2014-11-20
    • 2023-03-29
    • 2014-08-30
    • 2012-09-05
    • 2013-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多