【发布时间】: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