繁体   English   中英

为什么printf在C中返回int而不是size_t

[英]Why does printf return an int instead of a size_t in C

不应该返回size_t类型的返回值吗? 因为C中对象的大小属于这种类型,包括传递给printf的字符串。

为什么printf在C中返回一个int?
不应该是size_t类型的?

它可能是,但肯定早期的设计决定是容纳负EOF的返回值以指示错误。

size_t是早期设计选择中的事后想法。 许多函数使用int ,其中size_t现在在那些标准前的日子里使用。


fprintf()具有环境限制 “任何单个转换可以产生的字符数至少应为4095。”因此,任何尝试输出的打印都可能在INT_MAX/SIZE_MAX关注之前INT_MAX/SIZE_MAX该限制。

你在很大程度上是正确的 - 实际上printf应该返回一个更大的类型,因为它理论上可以输出比可以放入内存的最大对象大小更多的字节,例如printf("%s%s", largest_string, largest_string)或者甚至是使用场宽/精度的更简单的例子。

原因只是我们坚持的历史错误。 对于snprintf尤其糟糕,因为snprintf被人为地限制为INT_MAX并且如果您尝试使用它创建更长的字符串,则会被强制返回错误。

当时编译器不需要函数声明来调用函数。 没有声明或未指定返回类型的函数的返回类型是int - 隐式int规则。 有些代码叫做printf而没有烦扰#include <stdio.h>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM