C中的可变Arity?

时间:2009-09-03 19:35:16

标签: c

有谁知道我如何能够为C中的函数实现变量arity?

例如,求和函数:

萨姆(1,2,3,4 ...); (采用可变数量的args)

谢谢!

4 个答案:

答案 0 :(得分:14)

整数的变量参数列表。根据需要调整类型:

#include <stdarg.h>

void myfunc(int firstarg, ...)
{
    va_list v;
    int i = firstarg;

    va_start(v, firstarg);
    while(i != -1)
    {
        // do things
        i = va_arg(v, int);
    }

    va_end(v);
}

您必须能够确定何时停止读取变量args。这是通过终结器参数(在我的示例中为-1)完成的,或者通过了解某些其他源的预期args数(例如,通过检查printf中的格式化字符串)来完成。

答案 1 :(得分:6)

如果所有aditional参数的类型相同,您也可以传递数组而不是使用可变参数宏。

使用C99复合文字和一些宏魔术,这看起来很不错:

#include <stdio.h>

#define sum(...) \
    sum_(sizeof ((int []){ __VA_ARGS__ }) / sizeof (int), (int []){ __VA_ARGS__ })

int sum_(size_t count, int values[])
{
    int s = 0;
    while(count--) s += values[count];
    return s;
}

int main(void)
{
    printf("%i", sum(1, 2, 3));
}

答案 2 :(得分:1)

答案 3 :(得分:1)

如果您正在尝试实现变量arity函数,请查看http://www.cprogramming.com/tutorial/lesson17.html以获取介绍。