【发布时间】:2014-04-01 10:27:14
【问题描述】:
我刚刚在 C 中发现了可变参数函数,并将一个定义为通用通知 typedef,它以及指向文本字符串的指针可以选择随其发送任何参数 - 例如,可用作通用调试函数我希望在一个地方进行所有输出字符串操作。
因为我希望我的 C 文件尽可能通用,所以我有静态变量,其中包含指向更高代码中可能的回调的指针,并填充在 init 调用中。由于如果对更高的代码不感兴趣,指针可能为空,我通常有一个本地包装器,如果它不为空,则只通过指针调用。但是我无法弄清楚如何转发这个由“...”表示的模糊事物,并且简单地在参数列表中调用带有“...”的函数会出现语法错误。
有什么方法可以做到这一点,还是我坚持使用虚拟本地处理程序并让 init 将 null 回调设置为指向它的指针?
【问题讨论】:
-
我不明白你的意思。你能举一两个例子吗?
-
以debug为例;大多数是单个文本,
DebugMessage("whatever specific error"),但有些你可能想添加额外的信息——最简单的是一些简单变量的值。现在您可以使用 printf 并分配一个字符串缓冲区,填充它并将其发送回,但这比DebugMessage("Failure at test point %d; var1=%d, var2=%d", 23, a, b)更痛苦,因为 DebugMessage 可能在嵌入式平台(输出到串行)上与在 GUI 上做不同的事情基于台式电脑(弹出一个对话框),您希望它在更高级别。更清晰? -
部分,是的。您可以愉快地为此创建一个可变参数函数。但请始终记住提供一个采用
va_list并由其他人调用的版本。那里有一些图书馆,作者“忘记”了它们,扩展它们是一个真正的 PITA。 -
是的,我认为这是可行的方法,因为在我的情况下无论如何你都需要该功能。