我刚刚在 C 中发现了可变参数函数,并将其定义为通用通知 typedef,它以及指向文本字符串的指针可以有选择地与它一起发送任何参数——例如用作通用调试函数我希望所有输出字符串操作都集中在一个地方。
因为我希望我的 C 文件尽可能通用,所以我有静态变量,其中包含指向更高代码中可能的回调的指针,并在 init 调用中填充。由于如果更高的代码不感兴趣,指针可能为空,我通常有一个本地包装器,如果它不为空,则只通过指针调用。但是我无法弄清楚如何转发这个由“...”表示的模糊事物,并且简单地在参数列表中使用“...”调用函数会产生语法错误。
有什么方法可以做到这一点,还是我坚持使用虚拟本地处理程序并让 init 将空回调设置为指向它的指针?
最佳答案
您不能传递可变参数。您必须将它们提取到 va_list
并将其传递给内部函数。
看看this Question at the C FAQ .它定义了一个可变的 error
函数,该函数想要转发给 printf
。这只是您的用例。
在same FAQs ,通常建议为每个(或大多数)可变参数函数采用 va_list
的版本
关于c - 在可变参数函数的包装器中中继可选参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22783155/