gcc:转发可变参数函数调用

问题描述

有没有办法从另一个函数调用一个可变参数函数

我知道如果我想转发一个可变参数调用,我可以使用一个接受 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 个可用。