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