我正在开发自己的标准C库函数printf的实现。我目前正在尝试在符号指定参数数字($)时添加(非标准)行为。
在这种情况下,如果您提供5个参数,并且在格式字符串中仅引用了参数1、2 3和5,因为这些参数存储在通过va_start获取的列表中,所以我有问题。要进入参数5,我必须跳过参数4。这意味着我必须在参数4上调用va_arg。这意味着我必须为参数4指定类型,而我对此一无所知。
我的问题是:在这种情况下,printf使用哪种数据类型?或者,如果未知,您将使用哪种类型?我尝试过void,但是va_arg不接受它作为数据类型(这种方式有意义)。我知道所有这些都是未定义的行为,但我正在尝试弄清楚printf如何处理它,因此欢迎提出任何想法!
答案 0 :(得分:6)
在这种情况下,printf使用哪种数据类型?
不是。 printf
期望使用所有编号的参数。来自man page:
使用'$'指定的参数数量可能没有空格;例如,如果指定了参数1和3,则还必须在格式字符串的某处指定参数2。
因此,在您的示例中假设如果在格式字符串中引用了$5
,那么所有先前的字符也都是正确的。