diff options
Diffstat (limited to 'reference/C/MAN/va_start.htm')
-rw-r--r-- | reference/C/MAN/va_start.htm | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/reference/C/MAN/va_start.htm b/reference/C/MAN/va_start.htm new file mode 100644 index 0000000..a35845f --- /dev/null +++ b/reference/C/MAN/va_start.htm @@ -0,0 +1,159 @@ +<TITLE>va_start</TITLE> +<body bgcolor="#ffffcc"> +<hr> +<pre> + + + +<h3>STDARG(3) Linux Programmer's Manual STDARG(3) +</h3> + +<h3>NAME +</h3> stdarg - variable argument lists + +<h3>SYNOPSIS +</h3> #include <stdarg.h> + + void va_start( va_list ap, last); + typeva_arg( va_list ap, type); + void va_end( va_list ap); + +<h3>DESCRIPTION +</h3> A function may be called with a varying number of argu- + ments of varying types. The include file stdarg.h + declares a type va_list and defines three macros for step- + ping 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 parame- + ter 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. Succes- + sive invocations return the values of the remaining argu- + ments. + + The va_end macro handles a normal return from the function + whose variable argument list was initialized by va_start. + + + +<h3>BSD MANPAGE 29 November 1993 1 +</h3> + + + + +<h3>STDARG(3) Linux Programmer's Manual STDARG(3) +</h3> + + The va_end macro returns no value. + +<h3>EXAMPLES +</h3> The function foo takes a string of format characters and + prints out the argument associated with each format char- + acter 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("string %s\n", s); + break; + case 'd': /* int */ + d = va_arg(ap, int); + printf("int %d\n", d); + break; + case 'c': /* char */ + c = va_arg(ap, char); + printf("char %c\n", c); + break; + } + va_end(ap); + } + +<h3>STANDARDS +</h3> The va_start, va_arg, and va_end macros conform to ANSI + C3.159-1989 (``ANSI C''). + +<h3>COMPATIBILITY +</h3> These macros are not compatible with the historic macros + they replace. A backward compatible version can be found + in the include file varargs.h. + +<h3>BUGS +</h3> 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 argu- + ments on to a function that takes a va_list argument, such + as vfprintf(3). + + + + + + + + + +<h3>BSD MANPAGE 29 November 1993 2 +</h3> + +
</pre> +<P> +<hr> +<p> +<center> +<table border=2 width=80%> +<tr align=center> +<td width=25%> +<a href=../cref.html>Top</a> +</td><td width=25%> +<a href=../master_index.html>Master Index</a> +</td><td width=25%> +<a href=../SYNTAX/keywords.html>Keywords</a> +</td><td width=25%> +<a href=../FUNCTIONS/funcref.htm>Functions</a> +</td> +</tr> +</table> +</center> +<p> +<hr> + +This manual page was brought to you by <i>mjl_man V-2.0</i> |