C中参数数量未知的函数

Z K*_*Kim 9 c function variadic-functions

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

jbx*_*jbx 22

是的,您可以使用所谓的Variadic函数在C中完成.例如,标准printf()scanf()功能就是这样做的.

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

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

#include <stdarg.h>
Run Code Online (Sandbox Code Playgroud)

然后你有一个特殊的类型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;
}
Run Code Online (Sandbox Code Playgroud)

示例电话:

myfunc(4, -9, 12, 43, 217);
Run Code Online (Sandbox Code Playgroud)

可以在维基百科上找到完整的示例.

count示例中的参数告诉被调用函数传递了多少个参数.在printf()scanf()发现了通过格式字符串,但一个简单的count参数可以做到这一点.有时,代码使用sentinel值,例如负整数或空指针(execl() 例如,参见 参考资料).