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