Available in

(3) (3head)

TOC

varargs(3HEAD)                      Headers                     varargs(3HEAD)



NAME

       varargs - handle variable argument list

SYNOPSIS

       #include <varargs.h>
       va_alist
       va_dcl
       va_list pvar;

       void va_start(va_listpvar);

       type va_arg(va_list pvar, type);

       void va_end(va_list pvar);

DESCRIPTION

       This  set  of  macros  allows  portable procedures that accept variable
       argument lists to be written.  Routines  that  have  variable  argument
       lists  (such as printf(3C)) but do not use  varargs are inherently non-
       portable, as different machines use different argument-passing  conven‐
       tions.

       va_alist is used as the parameter list in a function header.

       va_dcl  is  a  declaration  for   va_alist.  No semicolon should follow
       va_dcl.

       va_list is a type defined for the variable used to traverse the list.

       va_start is called to initialize pvar to the beginning of the list.

       va_arg will return the next argument in the list pointed  to  by  pvar.
       type is the type the argument is expected to be. Different types can be
       mixed, but it is up to the routine to know what  type  of  argument  is
       expected, as it cannot be determined at runtime.

       va_end is used to clean up.

       Multiple  traversals, each bracketed by va_start and va_end, are possi‐
       ble.

EXAMPLES

       Example 1: A sample program.

       This example is a possible implementation of  execl (see  exec(2) ).


              #include <unistd.h>
              #include <varargs.h>
              #define MAXARGS     100
              /*   execl is called by
                        execl(file, arg1, arg2, ..., (char *)0);
              */
              execl(va_alist)
              va_dcl
              {
                   va_list ap;
                   char *file;
                   char *args[MAXARGS];          /* assumed big enough*/
                   int argno = 0;

                   va_start(ap);
                   file = va_arg(ap, char *);
                   while ((args[argno++] = va_arg(ap, char *)) != 0)
                        ;
                   va_end(ap);
                   return execv(file, args);
              }


SEE ALSO

       exec(2), printf(3C), vprintf(3C), stdarg(3HEAD)

NOTES

       It is up to the calling routine to specify  in  some  manner  how  many
       arguments  there  are, since it is not always possible to determine the
       number of arguments from the stack frame.  For example, execl is passed
       a  zero pointer to signal the end of the list. printf can tell how many
       arguments are there by the format.

       It is non-portable to specify a second  argument  of  char,  short,  or
       float  to   va_arg, since arguments seen by the called function are not
       char, short, or float. C converts  char and  short  arguments  to   int
       and  converts  float arguments to double before passing them to a func‐
       tion.

       stdarg is the preferred interface.



SunOS 5.9                         3 Jul 1990                    varargs(3HEAD)

COMMENTS

Add your comment here. Whitespace and linebreaks are preserved. URLs are linked automatically.
CAPTCHA

No HTML allowed. URLs will be linked with nofollow attribute. Whitespace is preserved.