printf / fprintf根据c99的最大尺寸

C99 标准说:

任何单次转换可以产生的字符数应至少为4095

这是否意味着最大尺寸是4095,如果是,为什么它说“至少”?

您已经找到了C语言规范中较烦人的一个方面。 他们通常不会说最大值是多少。 相反,他们通常会说出最大允许值是多少。

他们认识到不同的硬件/编译器/链接器环境有不同的限制,因此他们将大部分限制留给了各个工具作者。 但是,他们希望在环境之间提供一定程度的可移植性,因此他们指定了最大值可以采用的最低值。

这就是我们如何得到限制,例如在消除符号歧义时只考虑标识符的前8个字符 – 他们不想强迫任何实现者处理更长的标识符,因此他们说“最小最大”长度为8。

这是同样的故事 – 他们希望程序员能够使用体面的转换,但是认识到某些平台可能无法处理大量转换 – 所以他们设置了足够大的尺寸,大多数程序员都不会知道限制,但足够小,一些实现只能做到最小,仍然是合规的。

实现编译器必须允许至少4095个字符,但允许更多。

“至少”意味着它是最小的,而不是最大的。

实现必须至少支持那么多,但可以支持更多。

C标准没有规定最大值。 它们指定的是允许最大值的最小值。