Name
va_arg, va_copy, va_end, va_start
Synopsis
Manage variable-argument lists
#include <stdarg.h> voidva_start( va_listargptr,last_fixed_arg);typeva_arg( va_listargptr,type); voidva_copy( va_listdest, va_listsrc); (C99) voidva_end( va_listargptr);
The macros va_arg(),
va_start(), and va_end() allow you to define C functions
with variable numbers of arguments. Such functions use these macros
to access the optional arguments, which are managed as anonymous
objects in a list referenced by a pointer object of type va_list.
The prototype syntax for a function that takes a variable number of arguments is as follows:
fn_type fn_name( [arg_type_1 fixed_arg_1, [arg_type_2 fixed_arg_2, [etc.]]]last_arg_type last_fixed_arg, ... );
The ellipsis (...) after
last_fixed_arg in this syntax is a
literal ellipsis, which must appear in the function prototype to
represent the optional arguments. A function with optional arguments
must also take at least one mandatory argument. The ellipsis
representing the optional arguments must be the last item in the
parameter list, after the last mandatory parameter. The following
example shows the prototype of the function vop(), which takes two mandatory
arguments—one with the type pointer to const char and one with the type int—and a variable number of optional
arguments:
double vop( const char * op, int argcount, ... );
In a function definition, the macros va_start(), va_arg(), va_copy(), and va_end() allow you to access the optional
arguments.
va_start ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access