C中的可变Arity?

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

例如,求和函数:

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

谢谢!

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

#include  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中的格式化字符串)来完成。

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

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

 #include  #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)); } 

看看va_arg和朋友们 。

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