use*_*487 0 c variadic-functions
我正在尝试在 C 中使用变量参数创建一个递归函数,但在编写递归调用时似乎无法传递参数。
代码:
void f(const char* s, ...) {
va_list args;
va_start(args, s);
f(s,args);
va_end(args);
}
}
Run Code Online (Sandbox Code Playgroud)
不要介意无限的调用堆栈。这不是重点,所以我放弃了代码中的所有其他方面。
小智 5
Ava_list是一种实现定义的方法,用于访问您在编译时不知道的函数的参数 - 例如(取决于体系结构)函数堆栈帧中某处的指针。您不能使用它来代替实际参数。
如果您需要传递可变参数,典型的方法是在带有参数的函数中实现va_list。命名该函数的惯用方法是在其名称前添加 a v。所以最后,你有两个功能:
void vf(const char* s, va_list ap) {
// your logic ...
vf(s, ap); // recursive call
}
// just a wrapper:
void f(const char* s, ...) {
va_list args;
va_start(args, s);
vf(s, args);
va_end(args);
}
Run Code Online (Sandbox Code Playgroud)
请注意,这传递了对最初调用函数时使用的参数的引用。如果这对您的逻辑来说是一个问题,您可以使用宏复制整个参数列表va_copy。