将变量参数传递给具有变量参数列表的函数
考虑两个具有相似变量参数的函数:
void example(int a, int b, ...); void exampleB(int b, ...);
假设 example 调用 exampleB,但不修改 exampleB (在其他地方使用)。我们如何将变量参数从 example 传递到 exampleB?
解决方案:
直接传递参数是不可能的。相反,我们创建一个采用 va_list 的包装函数:
#include <stdarg.h> static void exampleV(int b, va_list args);
修改的函数 exampleA:
void exampleA(int a, int b, ...) // Renamed for consistency { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); }
未修改的函数 exampleB:
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
包装函数exampleV:
static void exampleV(int b, va_list args) { // Whatever `exampleB` was intended to do... // Except it doesn't call either `va_start` or `va_end`. }
这种方法允许我们将变量参数从 example 传递到 exampleB,而不修改后者。包装函数 exampleV 不会调用 va_start 或 va_end,这确保了与 exampleB 现有用法的一致性。
以上是如何在不修改接收函数的情况下将变量参数从一个函数传递到另一个函数?的详细内容。更多信息请关注PHP中文网其他相关文章!