在包装器中为可变参数函数转发可选参数

时间:2014-04-01 10:27:15

标签: c variadic

我刚刚在C中发现了可变参数函数,并将一个函数定义为一般通知typedef,该函数以及指向文本字符串的指针可以选择包含随其发送的任何参数 - 例如用作通用调试函数我希望在一个地方进行所有输出字符串操作。

因为我希望我的C文件尽可能通用,所以我有静态变量,它包含指向更高代码中可能的回调的指针,在init调用中填充。由于如果更高的代码不感兴趣,指针可能为null,我通常会有一个本地包装器,只有在它不为空时才通过指针调用。但我无法弄清楚如何转发由'...'表示的模糊事物,只需在参数列表中调用带有'...'的函数就会产生语法错误。

有没有办法做到这一点,或者我是否坚持使用虚拟本地处理程序并让init设置null回调指向该指针?

1 个答案:

答案 0 :(得分:2)

您无法传递可变参数。您必须将它们提取到va_list并将其传递给内部函数。

看看this Question at the C FAQ。它定义了一个想要转发到error的可变printf函数。这只是你的用例。

same FAQs中,通常建议为每个(或大多数)可变函数使用va_list版本