man(1) Manual page archive


     VARARGS(3)                                             VARARGS(3)

     NAME
          varargs - variable argument list

     SYNOPSIS
          #include <varargs.h>
          function(va_alist)
          va_dcl

          va_list pvar;

          va_start(pvar);

          va_arg(pvar, type);

          va_end(pvar);

     DESCRIPTION
          This set of macros allows portable procedures that accept
          variable argument lists to be written.  Routines which have
          variable argument lists (such as printf(3)) that do not use
          varargs are inherently nonportable, since different machines
          use different argument passing conventions.

          The literal identifier va_alist is used in a function header
          to declare a variable argument list.  It is declared by
          va_dcl. Note that there is no semicolon after va_dcl.

          Va_list is the type of the variable pvar, which is used to
          traverse the list.  One variable of this type must always be
          declared.

          Va_start initializes pvar to the beginning of the list.

          Va_arg returns the next argument in the list pointed to by
          pvar. Type is the type the argument is expected to be.  Dif-
          ferent types can be mixed, but it is up to the routine to
          know what type is expected, since it cannot be determined at
          runtime.

          Va_end is used to finish up.

          Multiple traversals, each bracketed by va_start and va_end,
          are possible.

     EXAMPLES
          How to define execl in terms of execv; see exec(2):

               #include <varargs.h>
               execl(va_alist)
               va_dcl

     VARARGS(3)                                             VARARGS(3)

               {
                    va_list ap;
                    char *file;
                    char *args[100];
                    int argno = 0;
                    va_start(ap);
                    file = va_arg(ap, char*);
                    while(args[argno++] = va_arg(ap, char*));
                    va_end(ap);
                    execv(file, args);
               }