参数序列不完整时带$表示法的Printf行为

Lau*_*ier 3 c printf

我正在开发自己的标准C库函数printf的实现。我目前正在尝试在符号指定参数数字($)时添加(非标准)行为。

在这种情况下,如果您提供5个参数,并且在格式字符串中仅引用了参数1、2 3和5,因为这些参数存储在使用va_start获取的列表中,那么我就有问题了。要进入参数5,我将不得不跳过参数4。这意味着我必须在参数4上调用va_arg。这意味着我必须为参数4指定类型,而我对此一无所知。

我的问题是:在这种情况下,printf使用哪种数据类型?或者,如果未知,您将使用哪种类型?我尝试了void,但是va_arg不接受它作为数据类型(这种方式有意义)。我知道所有这些都是未定义的行为,但是我正在尝试弄清楚printf如何处理它,因此欢迎任何想法!

dbu*_*ush 6

在这种情况下,printf使用哪种数据类型?

没有。 printf期望使用所有编号的参数。从手册页

使用'$'指定的参数数量可能没有空格;例如,如果指定了参数1和3,则还必须在格式字符串的某处指定参数2。

因此,在您的示例中假设如果$5在格式字符串中引用了所有以前的字符串,那么也很好。