C中的可变Arity?

nub*_*ela 2 c

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

例如,求和函数:

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

谢谢!

Ben*_*n M 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);
}
Run Code Online (Sandbox Code Playgroud)

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


Chr*_*oph 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));
}
Run Code Online (Sandbox Code Playgroud)