|
NAMEstdarg —
variable argument lists
SYNOPSIS#include <stdarg.h>
void
type
void
void
DESCRIPTIONA function may be called with a varying number of arguments of varying types. The include file<stdarg.h>
declares a type (va_list) and defines four macros for
stepping through a list of arguments whose number and types are not known to
the called function.
The called function must declare an object of type
va_list which is used by the macros
The The parameter last is the name of the last parameter before the variable argument list, i.e., the last parameter of which the calling function knows the type. Because the address of this parameter is used in the
The If there is no next argument, or if type is not compatible with the type of the actual next argument (as promoted according to the default argument promotions), random errors will occur. The first use of the The The Each invocation of RETURN VALUESTheva_arg () macro returns the value of the next
argument.
The EXAMPLESThe function foo takes a string of format characters and prints out the argument associated with each format character based on the type.void foo(char *fmt, ...) { va_list ap; int d; char c, *s; va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char *); printf("string %s\n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d\n", d); break; case 'c': /* char */ /* Note: char is promoted to int. */ c = va_arg(ap, int); printf("char %c\n", c); break; } va_end(ap); } COMPATIBILITYThese macros are not compatible with the historic macros they replace. A backward compatible version can be found in the include file<varargs.h> .
STANDARDSTheva_start (), va_arg (),
va_copy (), and va_end () macros
conform to ISO/IEC 9899:1999
(“ISO C99”).
HISTORYTheva_start (), va_arg () and
va_end () macros were introduced in
ANSI X3.159-1989 (“ANSI C89”).
The va_copy () macro was introduced in
ISO/IEC 9899:1999 (“ISO C99”).
BUGSUnlike the varargs macros, thestdarg
macros do not permit programmers to code a function with no fixed arguments.
This problem generates work mainly when converting varargs
code to stdarg code, but it also creates difficulties
for variadic functions that wish to pass all of their arguments on to a
function that takes a va_list argument, such as
vfprintf(3).
Visit the GSP FreeBSD Man Page Interface. |