MyWebUniversity.com Home Page
 



OpenSolaris man pages main menu


Extended Library Functions                          varargs(3EXT)



NAME
     varargs - handle variable argument list

SYNOPSIS
     #include 
     vaalist
     vadcl
     valist pvar;

     void vastart(valistpvar);


     type vaarg(valist pvar, type);


     void vaend(valist 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 conventions.


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


     vadcl is a declaration for vaalist.  No  semicolon  should
     follow vadcl.


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


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


     vaarg 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.


     vaend is used to clean up.






SunOS 5.11          Last change: 10 May 2002                    1






Extended Library Functions                          varargs(3EXT)



     Multiple traversals, each bracketed by vastart and  vaend,
     are possible.

EXAMPLES
     Example 1 A sample program.


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


       #include 
       #include 
       #define MAXARGS     100
       /*   execl is called by
                 execl(file, arg1, arg2, ..., (char *)0);
       */
       execl(vaalist)
       vadcl
       {
            valist ap;
            char *file;
            char *args[MAXARGS];          /* assumed big enough*/
            int argno = 0;

            vastart(ap);
            file = vaarg(ap, char *);
            while ((args[argno] = vaarg(ap, char *)) != 0)
                 ;
            vaend(ap);
            return execv(file, args);
       }



SEE ALSO
     exec(2), printf(3C), vprintf(3C), stdarg(3EXT)

NOTES
     It is up to the calling routine to specify  in  some  manner
     how  many arguments there are, since it is not always possi-
     ble 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  vaarg,  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 function.



SunOS 5.11          Last change: 10 May 2002                    2






Extended Library Functions                          varargs(3EXT)



     stdarg is the preferred interface.






















































SunOS 5.11          Last change: 10 May 2002                    3



OpenSolaris man pages main menu

Contact us      |       About us      |       Term of use      |       Copyright © 2000-2010 MyWebUniversity.com ™