不应该返回size_t
类型的回报吗?因为C中对象的大小属于这种类型,包括传递给printf
的字符串。
答案 0 :(得分:8)
为什么printf在C中返回一个int? 不应该是
size_t
类型的?
可能是,但肯定早期的设计决定是容纳负EOF
的返回值以表示错误。
size_t
是一种事后的想法。许多函数使用int
,其中size_t
现在用于预标准天。
fprintf()
有一个环境限制“任何单次转换可以生成的字符数至少为4095.”,因此任何尝试长的打印输出可能会在INT_MAX/SIZE_MAX
关注之前遇到该限制。
答案 1 :(得分:1)
你在很大程度上是正确的 - 实际上printf
应该返回一个更大的类型,因为理论上可以输出比可以容纳在内存中的最大对象的大小多得多的字节,例如:使用字段宽度/精度的printf("%s%s", largest_string, largest_string)
甚至更简单的例子。
原因只是我们坚持的历史错误。 snprintf
特别糟糕,人为限制为INT_MAX
,如果您尝试使用它创建更长的字符串,则会被强制返回错误。
答案 2 :(得分:0)
当时编译器不需要函数声明来调用函数。没有声明或未指定返回类型的函数的返回类型是int
- 隐式int 规则。一些代码称为printf
而没有烦扰#include <stdio.h>
。