Aru*_*pta 0 c variadic-functions
我有一个函数,log_message它需要可变参数。
log_message(int level, char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
现在在调用 this( log_message) 函数之前,我必须添加新函数 ( _log_message),新函数将调用log_message.
_log_message(int level, char *fmt, ...)
Run Code Online (Sandbox Code Playgroud)
新功能也一样。何时_log_message调用log_message它会将变量输入转换为va_list. 现在我有va_list,我不想改变原来的,有没有办法改回可变输入,所以我可以调用原来的(log_message)。
不,没有办法将va_list返回变成参数列表。
通常的方法是定义一个将 ava_list作为参数的基函数。例如,标准 C 库定义了printf和vprintf;第一个是 varargs 函数,第二个具有完全相同的功能,但va_list取而代之。同样,它定义了fprintf和vfprintf。定义printf,vprintf 并且fprintf在以下方面是微不足道的vfprintf:
int fprintf(FILE* stream, const char* format, ...) {
va_list ap;
va_start(ap, format);
int n = vfprintf(stream, format, ap);
va_end(ap);
return n;
}
int vprintf(const char* format, va_list ap) {
return vfprintf(stdout, format, ap);
}
int printf(const char* format, ...) {
va_list ap;
va_start(ap, format);
int n = vprintf(format, ap);
va_end(ap);
return n;
}
Run Code Online (Sandbox Code Playgroud)
(类似地,对于各个exec*功能,进来都va_list和varargs品种。)
我建议你采用类似的策略。