将变量参数传递给具有变量参数列表的函数
当使用接受可变数量参数的函数时,通常需要调用一个这样的函数来自另一个函数。但是,如果目标函数已在其他地方使用,则在不修改目标函数的情况下直接将参数从一个函数传递到另一个函数可能会出现问题。
考虑以下示例:
void example(int a, int b, ...); void exampleB(int b, ...);
在此场景中,示例调用 exampleB。但是,问题出现了:如何在不修改原始实现的情况下将 example 中的变量参数传递给 exampleB?
直接将参数从 example 传递到 exampleB 是不可能的。相反,必须创建一个采用 va_list 的中间函数:
#include <stdarg.h> static void exampleV(int b, va_list args); 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); } void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); } static void exampleV(int b, va_list args) { ...whatever you planned to have exampleB do... ...except it calls neither va_start nor va_end... }
通过引入 exampleV(它同时采用 b 和 args 作为参数),exampleA 可以将其变量参数传递给 exampleB,而无需修改其实现。然后可以使用这个中间函数来执行预期的操作,而不会破坏 exampleB 的原始实现。
以上是如何使用变量参数列表将变量参数从一个函数传递到另一个函数?的详细内容。更多信息请关注PHP中文网其他相关文章!