【问题标题】:Does Visual Studio officially support "%lld" format specifier for __int64?Visual Studio 是否正式支持 __int64 的“%lld”格式说明符?
【发布时间】:2017-05-18 16:17:09
【问题描述】:

根据本文档 https://msdn.microsoft.com/en-us/library/tcxf1dw6(v=vs.140).aspx 程序员应该用 %lld 打印 long long 变量,用 %I64d 打印 __int64 变量。

根据这份文件,https://msdn.microsoft.com/en-us/library/s3f49ktz.aspx__int64 只是 long long 的另一个名称。

那么为什么第一个文档不直接说 %lld 也可以用于 __int64 呢? VS 团队认为未来 __int64 会与 long long 不同吗?如果他们关心向后兼容性,我无法想象这将如何发生......

谢谢

【问题讨论】:

  • 他们希望保持选项打开 - 毕竟 int 在过去也曾经是 16 位。也让你的意图更清晰
  • 我记得 int 是 16 位的。在 64 位中,Microsoft 使用 32 位 long(为了兼容性),而其他所有人都将其增加到 64 位。
  • 您链接到的第一个页面顶部有一个“未维护”的免责声明,因为它记录了一个 12 年前的编译器和库版本。最新页面更详细。但归根结底,%lld 是 C++ 标准的一部分(微软无法控制),%I64d 是微软的扩展(他们可以控制)。尽管不太可能,但可以想象long long int__int64 在未来可能会出现分歧。例如,也许有一天会要求一个是二进制补码,另一个是有符号的量级。
  • 更新了第一个链接,谢谢。好吧,我明白了。我们只是希望他们不需要区分这些类型。

标签: c++ visual-studio format-specifiers long-long


【解决方案1】:

是的,从 VS2013 (_MSC_VER >= 1800) 开始,VS 确实支持long long%lld。 有关受支持的 printf 说明符,请参阅 msdn documentation page

尽管根据他们的文档,__int64“需要”I64,但是,__int64long long 相同或可转换为long long,并且可以在没有警告的情况下工作。

【讨论】:

    猜你喜欢
    • 2021-12-31
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多