将参数动态传递给可变参数函数

我想知道是否有任何方法可以动态地将参数传递给可变参数函数.即如果我有功能

int some_function (int a, int b, ...){/*blah*/}

我接受用户的一堆值,我想要一些方法将这些值传递给函数:

some_function (a,b, val1,val2,...,valn)

我不想写所有这些功能的不同版本,但我怀疑没有其他选择?

变量函数使用调用约定,其中调用者负责从堆栈弹出函数参数,所以是的,可以动态地执行此操作.它在C中没有标准化,通常需要一些程序集来手动推送所需的参数,并正确调用可变参数函数.

cdecl调用约定要求以正确的顺序推送参数,并且在调用之后,弹出在调用之前作为参数推送的字节.通过这种方式,被调用函数可以接收任意数量的参数,因为调用者将处理将堆栈指针恢复为其预调用状态.在…之前的参数占用的空间是推送的字节数的安全下限.在运行时解释其他可变参数.

FFCALL是一个库,它提供了将参数动态传递给可变参数函数的包装器.您感兴趣的功能组是avcall.以下是调用上面给出的功能的示例:

#include <avcall.h>

av_alist argList;
int retVal;
av_start_int(argList, some_function, retval);
av_int(argList, a);
av_int(argList, b);
av_type(argList, val1);
...
av_type(argList, valn);
av_call(argList);

您可能还会发现this link讨论在C中围绕可变函数生成包装器,以证明为什么这不是标准C的一部分.

相关文章
相关标签/搜索