C中参数数量未知的函数

时间:2012-04-09 09:14:15

标签: c function variadic-functions

如何编写(如果可能的话......)一个在C99中获取未知数量参数的函数(返回类型是常量)?

1 个答案:

答案 0 :(得分:18)

是的,您可以使用所谓的Variadic Functions在C中执行此操作。 例如,标准printf()scanf()函数执行此操作。

将省略号(三个点)作为您想要'可变参数数量的最后一个参数。

要访问参数,请使用<stdarg.h>标题:

#include <stdarg.h>

然后你有一个特殊的类型va_list,它为你提供了传递的参数列表,你可以使用va_startva_argva_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() 例如)。