有谁知道我如何能够为C中的函数实现变量arity?
例如,求和函数:
萨姆(1,2,3,4 ...); (采用可变数量的args)
谢谢!
答案 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以获取介绍。