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

时间:2019-06-20 15:43:27

标签: c printf

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

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

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

1 个答案:

答案 0 :(得分:6)

  

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

不是。 printf期望使用所有编号的参数。来自man page

  

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

因此,在您的示例中假设如果在格式字符串中引用了$5,那么所有先前的字符也都是正确的。