将变量参数传递给函数

时间:2016-07-14 12:35:52

标签: c

我有一个C函数,它采用自定义结构和可变数量的不同类型的参数(整数/字符串/其他自定义结构......)。由于结构的原因,函数能够确定每个参数的类型,以便处理它。

void doStuff(MyStruct *S,...){ <function code> } 

现在我需要另一个可以将“n”个常量参数传递给“doStuff”的函数。即像这样的东西:

void useDoStuff(Mystruct *S, int n){ //lets say n=4
    va_list arguments;
    int i;
    for(i = 0 ; i < n ; i++){
       if(i%2) arguments.add(6);   //example condition for the arguments
       else arguments.add("Hello");
    }
    doStuff(S, arguments); // doStuff(S, "Hello", 6, "Hello", 6);
} 

当然这不会起作用,因为va_list不能像这样使用(仅用于粗略地'可视化'所需要的东西)。不幸的是,结构和'doStuff'功能都无法改变,我需要找到一种解决方法。这样的解决方法是否存在?

1 个答案:

答案 0 :(得分:2)

C没有定义任何动态构造变量参数列表的机制。通常,编译器将varargs调用转换为普通函数调用,使用特定于实现的机制来处理调用两端的参数列表。为此,编译器需要知道每个调用的实际参数是什么。

如果一切都必须通过varargs函数,那么所有选项都可以是编写多个替代函数调用并动态选择要执行的函数或通过多个函数调用执行工作的变体。也许可以将它们结合起来。

然而,

考虑是否可以将varargs函数的适当部分行为考虑在内,以便可以直接行使它。例如,您可以提供一个或多个备用前端,它们接受以结构数组形式而不是变量参数形式使用的数据。