一次调用printf可以打印的值数量是否有限制?

printf打印的值的数量是否取决于为特定程序分配的内存,还是可以继续打印值?

C标准记录了编译器为函数调用接受的最小参数数量:

C11 5.2.4.1翻译限制

该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:

  • 一个函数调用中有127个参数

因此,您应该能够在初始格式字符串之后将至少126个值传递给printf ,假设格式字符串已正确构造并与后面的实际参数一致。

如果格式字符串是字符串文字,则标准保证编译器可以处理至少4095字节长的字符串文字,并且源行至少4095字符长。 您可以使用字符串连接在多个源行上拆分文字。 如果对格式字符串使用char数组,则不存在此类限制。

printf系列函数记录的唯一环境限制是:

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

这使得格式%10000d的行为最好由实现定义,但标准不%10000d要求。

因此,兼容的编译器/库组合应该接受至少126个printf值,无论您的环境是否允许更多参数可以由实现定义并记录,但标准不保证。