问题描述
我知道如果我想转发一个可变参数调用,我可以使用一个接受 va_list
参数的函数。
例如,如果我声明 my_printf
,我可以在内部调用 vfprintf
。
另一种方法是使用宏:
#define my_printf(a,...) fprintf(a,__VA_ARGS__)
但是有没有一种方法可以“创建”一个可变参数调用而不必强制使用 va_list
参数?
换句话说:有什么方法(标准与否,使用 gcc 扩展等)my_printf
可以直接调用 fprintf
而不是 vfprintf
?
解决方法
有没有办法从另一个函数调用一个可变参数函数?
是的,使用 va_list
。这是调用另一个可变参数函数的方式,标准化并在任何地方都受支持。从您的库中提供可变参数函数时,请确保您也提供 va_list
版本。不要使用其他选项,除非您绝对必须这样做。
有没有办法(标准
没有
嗯,有一个超级古老的POSIX varargs.h。
使用 gcc 扩展
有一些内置函数:__builtin_va_arg_pack() stuff 和 __builtin_apply()
东西。
等)
编写一些程序集来转发参数。
有 FFI libraries 个可用。