Va_end – Zilog EZ80F916 User Manual
Page 395

UM014423-0607
C Standard Library
ZiLOG Developer Studio II
eZ80Acclaim!
®
User Manual
375
Returns
The first invocation of the
va_arg
macro after that of the
va_start
macro returns the
value of the argument after that specified by parmN. Successive invocations return the val-
ues of the remaining arguments in succession.
Example
The function f1 gathers into an array a list of arguments that are pointers to strings (but not
more than MAXARGS arguments), then passes the array as a single argument to function
f2. The number of pointers is specified by the first argument to f1.
#include
extern void f2(int n, char *array[]);
#define MAXARGS 31
void f1(int n_ptrs,...) {
va_list ap;
char *array[MAXARGS];
int ptr_no = 0;
if (n_ptrs > MAXARGS)
n_ptrs = MAXARGS;
va_start(ap, n_ptrs);
while (ptr_no < n_ptrs)
array[ptr_no++] = va_arg(ap, char *);
va_end(ap);
f2(n_ptrs, array);
}
Each call to f1 has in scope the definition of the function of a declaration such as
void
f1(int, ...);
va_end
Facilitates a normal return from the function whose variable argument list was referenced
by the expansion of
va_start
that initialized the
va_list ap
. The
va_end
function
can modify
ap
so that it is no longer usable (without an intervening invocation of
va_start
). If the
va_end
function is not invoked before the return, the behavior is unde-
fined.
Synopsis
#include
void va_end(va_list ap);
Example
The function f1 gathers into an array a list of arguments that are pointers to strings (but not
more than MAXARGS arguments), then passes the array as a single argument to function
f2. The number of pointers is specified by the first argument to f1.