1 .\" Copyright (c) 1990, 1991 The Regents of the University of California.
2 .\" All rights reserved.
4 .\" This code is derived from software contributed to Berkeley by
5 .\" the American National Standards Committee X3, on Information
6 .\" Processing Systems.
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\" notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\" notice, this list of conditions and the following disclaimer in the
15 .\" documentation and/or other materials provided with the distribution.
16 .\" 3. All advertising materials mentioning features or use of this software
17 .\" must display the following acknowledgement:
18 .\" This product includes software developed by the University of
19 .\" California, Berkeley and its contributors.
20 .\" 4. Neither the name of the University nor the names of its contributors
21 .\" may be used to endorse or promote products derived from this software
22 .\" without specific prior written permission.
24 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 .\" @(#)stdarg.3 6.8 (Berkeley) 6/29/91
38 .\" Converted for Linux, Mon Nov 29 15:11:11 1993, faith@cs.unc.edu
39 .\" Additions, 2001-10-14, aeb
41 .TH STDARG 3 2001-10-14 "" "Linux Programmer's Manual"
43 stdarg, va_start, va_arg, va_end, va_copy \- variable argument lists
45 .B #include <stdarg.h>
47 .BI "void va_start(va_list " ap ", " last );
49 .IB type " va_arg(va_list " ap ", " type );
51 .BI "void va_end(va_list " ap );
53 .BI "void va_copy(va_list " dest ", va_list " src );
55 A function may be called with a varying number of arguments of varying
61 and defines three macros for stepping through a list of arguments whose
62 number and types are not known to the called function.
64 The called function must declare an object of type
66 which is used by the macros
80 and must be called first.
84 is the name of the last argument before the variable argument list, that is,
85 the last argument of which the calling function knows the type.
87 Because the address of this argument may be used in the
89 macro, it should not be declared as a register variable,
90 or as a function or an array type.
94 macro expands to an expression that has the type and value of the next
107 so that the next call returns the next argument.
110 is a type name specified so that the type of a pointer to an object that
111 has the specified type can be obtained simply by adding a * to
116 macro after that of the
118 macro returns the argument after
120 Successive invocations return the values of the remaining arguments.
122 If there is no next argument, or if
124 is not compatible with the type of the actual next argument (as promoted
125 according to the default argument promotions), random errors will occur.
129 is passed to a function that uses
130 .BI va_arg( ap , type )
133 is undefined after the return of that function.
137 must be matched by a corresponding invocation of
139 in the same function.
145 Multiple traversals of the list, each
152 may be a macro or a function.
154 .\" Proposal from clive@demon.net, 1997-02-28
155 An obvious implementation would have a
157 be a pointer to the stack frame of the variadic function.
158 In such a setup (by far the most common) there seems
159 nothing against an assignment
167 Unfortunately, there are also systems that make it an
168 array of pointers (of length 1), and there one needs
177 Finally, on systems where arguments are passed in registers,
178 it may be necessary for
180 to allocate memory, store the arguments there, and also
181 an indication of which argument is next, so that
183 can step through the list.
186 can free the allocated memory again.
187 To accommodate this situation, C99 adds a macro
189 so that the above assignment can be replaced by
202 must be matched by a corresponding invocation of
204 in the same function.
205 Some systems that do not supply
209 instead, since that was the name used in the draft proposal.
216 macros conform to C89.
223 compatible with the historic macros they replace.
224 A backward-compatible version can be found in the include file
227 The historic setup is:
242 x = va_arg(ap, type);
252 contains a closing \(aq}\(aq matching a \(aq{\(aq in
254 so that both macros must occur in the same function, and in a way
261 macros do not permit programmers to code a function with no fixed
263 This problem generates work mainly when converting
267 code, but it also creates difficulties for variadic functions that wish to
268 pass all of their arguments on to a function that takes a
275 takes a string of format characters and prints out the argument associated
276 with each format character based on the type.
292 case \(aqs\(aq: /* string */
293 s = va_arg(ap, char *);
294 printf("string %s\en", s);
296 case \(aqd\(aq: /* int */
298 printf("int %d\en", d);
300 case \(aqc\(aq: /* char */
301 /* need a cast here since va_arg only
302 takes fully promoted types */
303 c = (char) va_arg(ap, int);
304 printf("char %c\en", c);