我大约有30个变长参数函数。每个函数都接受一个路径作为最后一个参数,例如:
bool do_foo(struct *f, int q, const char *fmt, ...)
在每个函数中,我都必须检查扩展格式是否小于或等于某个大小。因此,我发现自己在复制/粘贴相同的代码块以检查有多少字符 vsnprintf()
没有打印,根据情况设置 errno
并退出写操作。我想做的是编写一个函数来做这件事,它将返回已知为安全大小的静态分配(扩展)字符串,或在失败时返回新初始化的字符串,可以针对 NULL 进行检查。检查还必须确定字符串是绝对路径还是相对路径,这会影响字符串的安全大小。这是很多重复的代码,而且开始出现问题了。
是否有一种方法可以将 ellipsis 的内容从我的函数输入传递到另一个函数?还是我必须首先调用
va_start()
,然后将 va_list
传递给帮助程序函数?编辑:
我完全不反对将
va_list
传递给辅助程序,只是想确保没有其他东西存在。在我看来,编译器了解可变参数从哪里开始,所以我只是好奇能否告诉它将它们一起传递。