17

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

4

1 回答 1

36

是的,您可以在 C 中使用所谓的可变参数函数来实现。例如,标准printf()scanf()函数就是这样做的。

将省略号(三个点)作为最后一个参数,您希望参数数量可变。

要访问参数,请包括<stdarg.h>标题:

#include <stdarg.h>

然后你有一个特殊的类型va_list,它给你传递的参数列表,你可以使用va_start,va_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()countexecl()

于 2012-04-09T09:19:28.943 回答