chq*_*lie 17
C标准记录了编译器为函数调用接受的最小参数数量:
C11 5.2.4.1翻译限制
该实现应能够翻译和执行至少一个包含以下每个限制的至少一个实例的程序:
...
一个函数调用中有127个参数
...
因此,您应该能够printf在初始格式字符串之后传递至少126个值,假设格式字符串已正确构造并与后面的实际参数一致.
如果格式字符串是字符串文字,则标准保证编译器可以处理至少4095字节长的字符串文字,并且源行至少4095字符长.您可以使用字符串连接在多个源行上拆分文字.如果您使用char数组作为格式字符串,则不存在此类限制.
记录printf功能系列的唯一环境限制是:
任何单次转换可以产生的字符数应至少为4095
这使得格式的行为%10000d最好由实现定义,但标准不强制要求.
因此,兼容的编译器/库组合应该接受至少126个值printf,无论您的环境是否允许更多参数可以由实现定义并记录,但标准不保证.