如何编写(如果可能的话......)一个在C99中获取未知数量参数的函数(返回类型是常量)?
答案 0 :(得分:18)
是的,您可以使用所谓的Variadic Functions在C中执行此操作。
例如,标准printf()
和scanf()
函数执行此操作。
将省略号(三个点)作为您想要'可变参数数量的最后一个参数。
要访问参数,请使用<stdarg.h>
标题:
#include <stdarg.h>
然后你有一个特殊的类型va_list
,它为你提供了传递的参数列表,你可以使用va_start
,va_arg
和va_end
宏来迭代参数列表。
例如:
#include <stdarg.h>
int myfunc(int count, ...)
{
va_list list;
int j = 0;
va_start(list, count);
for(j=0; j<count; j++)
{
printf("%d", va_arg(list, int));
}
va_end(list);
return count;
}
示例电话:
myfunc(4, -9, 12, 43, 217);
可以在Wikipedia找到完整的示例。
示例中的count
参数告诉被调用函数传递了多少个参数。 printf()
和scanf()
通过格式字符串找到它,但是一个简单的count
参数也可以这样做。有时,代码使用sentinel值,例如负整数或空指针(请参阅
execl()
例如)。