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中的格式化字符串)来完成.
如果所有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)