[英]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.