[comp.os.minix] varargs

tholm@uvicctr.UUCP (Terrence W. Holm) (09/21/88)

EFTH MINIX report #47  - September 1988 -  varargs(3)


Varargs.h has been posted before - this time we also
get a "man" page.

----------------------------------------------------------
echo x - varargs.3
gres '^X' '' > varargs.3 << '/'
XSUBROUTINES
X    varargs(3)		- accessing a variable length argument list
X
XINVOCATION
X    #include <varargs.h>
X
X    f( va_alist )
X      va_dcl
X      {
X      va_list p;
X      type arg;
X      . . .
X      va_start( p );
X      arg = va_arg( p, type );
X      . . .
X      va_end( p );
X      }
X
XEXPLANATION
X    For portability, all functions which use variable length
X    argument lists should use the definitions from <varargs.h>.
X    Subroutines should begin, as shown above, with an argument
X    <va_alist> and the declaration <va_dcl>.
X
X    A "pointer" into the argument list is declared with the type
X    <va_list>. va_start() must be done before the first use of
X    the pointer, and va_end() must be done after the last use.
X    Multiple va_start() ... va_end() segments are allowed.
X
X    The list is accessed using va_arg(p,type). This returns the
X    value of the next element in the list. The <type> is the
X    type of the argument, for example (int).
/
echo x - varargs.h
gres '^X' '' > varargs.h << '/'
X/*  varargs.h  */
X
Xtypedef char *va_list;
X
X#define  va_dcl		int va_alist;
X#define  va_start(p)	(p) = (va_list) &va_alist;
X#define  va_arg(p,type)	( (type *) ((p)+=sizeof(type)) )[-1]
X#define  va_end(p)
/
----------------------------------------------------------

		Edwin L. Froese
		  uw-beaver!ubc-cs!mprg!handel!froese

		Terrence W. Holm
		  uw-beaver!uvicctr!tholm