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

时间:2017-08-17 16:17:15

标签: c printf

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

3 个答案:

答案 0 :(得分:8)

  

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

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

在早期的设计选择中,{p> 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>