VARARGS(3) Library Functions Manual VARARGS(3)
varargs - variable argument list
f = va_arg(pvar, type);
This set of macros provides a means of writing portable procedures that
accept variable argument lists. Routines having variable argument
lists (such as printf(3)) that do not use varargs are inherently non-
portable, since different machines use different argument passing con-
va_alist is used in a function header to declare a variable argument
va_dcl is a declaration for va_alist. Note that there is no semicolon
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
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. Different
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 runtime.
va_end(pvar) is used to finish up.
Multiple traversals, each bracketed by va_start ... va_end, are possi-
int argno = 0;
file = va_arg(ap, char *);
while (args[argno++] = va_arg(ap, char *))
return execv(file, args);
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 supposed to be there by the format.
19 January 1983 VARARGS(3)