Name
va_arg, va_copy, va_end, va_start
Synopsis
Manage variable-argument lists
#include <stdarg.h> voidva_start
( va_listargptr
,last_fixed_arg
);type
va_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 ...
Get C in a Nutshell now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.