Home
Main website
Display Sidebar
Hide Ads
Recent Changes
View Source:
va_start(3)
Edit
PageHistory
Diff
Info
LikePages
STDARG !!!STDARG NAME SYNOPSIS DESCRIPTION EXAMPLES CONFORMING TO COMPATIBILITY BUGS ---- !!NAME stdarg - variable argument lists !!SYNOPSIS __#include __ __void va_start( va_list__ ''ap''__,__ ''last''__);__'' type'' __va_arg( va_list__ ''ap''__,__ ''type''__); void va_end( va_list__ ''ap''__);__ !!DESCRIPTION A 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 three 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 __va_start__, __va_arg__, and __va_end__. The __va_start__ macro initializes ''ap'' for subsequent use by __va_arg__ and __va_end__, and must be called first. 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 __va_start__ macro, it should not be declared as a register variable, or as a function or an array type. The __va_start__ macro returns no value. The __va_arg__ macro expands to an expression that has the type and value of the next argument in the call. The parameter ''ap'' is the __va_list ap__ initialized by __va_start__. Each call to __va_arg__ modifies ''ap'' so that the next call returns the next argument. The parameter ''type'' is a type name specified so that the type of a pointer to an object that has the specified type can be obtained simply by adding a * to ''type''. 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 __va_arg__ macro after that of the __va_start__ macro returns the argument after ''last''. Successive invocations return the values of the remaining arguments. The __va_end__ macro handles a normal return from the function whose variable argument list was initialized by __va_start__. The __va_end__ macro returns no value. !!EXAMPLES The 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, *p, *s; va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char *); printf( !!CONFORMING TO The __va_start__, __va_arg__, and __va_end__ macros conform to ANSI X3.159-1989 (``ANSI C''). !!COMPATIBILITY These macros are ''not'' compatible with the historic macros they replace. A backward compatible version can be found in the include file ''varargs.h''. !!BUGS Unlike the __varargs__ macros, the __stdarg__ 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). ----
One page links to
va_start(3)
:
Man3v
This page is a man page (or other imported legacy content). We are unable to automatically determine the license status of this page.