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