Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ varargs(3) — GENIX 4.1A

Media Vault

Software Library

Restoration Projects

Artifacts Sought



      VARARGS(3)              GENIX Programmer's Manual              VARARGS(3)



      NAME
           varargs - variable argument list

      SYNOPSIS
           #include <varargs.h>
           function(va_alist)
           va_dcl
           va_list pvar;
           va_start(pvar);
           f = 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.

           va_alist is used in a function header to declare a variable argument
           list.

           va_dcl is a declaration for va_alist.  Note that there is  no  semi-
           colon after va_dcl.

           va_list is a type which can be used for the variable pvar, which  is
           used  to  traverse  the  list.   One  such  variable  must always be
           declared.

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

           va_arg (pvar,type) will return 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  of argument is expected, since it cannot be determined at run-
           time.

           va_end (pvar) is used to finish up.

           Multiple traversals, each bracketted by  va_start  ..   va_end,  are
           possible.

      EXAMPLE
                #include <varargs.h>
                execl(va_alist)
                va_dcl
                {
                     va_list ap;
                     char *file;
                     char *args[100];
                     int argno = 0;



      Printed 11/16/83                                                        1





      VARARGS(3)              GENIX Programmer's Manual              VARARGS(3)



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

      BUGS
           It is up to the calling routine  to  determine  how  many  arguments
           there are, since it is not possible to determine this from the stack
           frame.  For example, execl passes a 0 to signal the end of the list.
           Printf can tell how many arguments are there by the format.










































      Printed 11/16/83                                                        2



Typewritten Software • bear@typewritten.org • Edmonds, WA 98026