Function with unknown number of parameters in C

c, function, variadic-functions

Solution

Yes you can do it in C using what are referred to as Variadic Functions. The standard `printf()` and `scanf()` functions do this, for example.

Put the ellipsis (three dots) as the last parameter where you want the 'variable number of parameters to be.

To access the parameters include the `<stdarg.h>` header:

#include <stdarg.h>

And then you have a special type `va_list` which gives you the list of arguments passed, and you can use the `va_start`, `va_arg` and `va_end` macros to iterate through the list of arguments.

For example:

#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;
}

Example call:

myfunc(4, -9, 12, 43, 217);

A full example can be found at Wikipedia.

The `count` parameter in the example tells the called function how many arguments are passed. The `printf()` and `scanf()` find that out via the format string, but a simple `count` argument can do it too. Sometimes, code uses a sentinel value, such as a negative integer or a null pointer (see `execl()` for example).

Problem

How can I write (if it's possible at all...) a function which takes an unknown number of parameters in C99 (the return type is constant)?

Original source

Related problems