No empty .Rs/.Re
[netbsd-mini2440.git] / share / man / man3 / varargs.3
blob83408363761f8dea4f7e5a71c1d2970f0883035c
1 .\"     $NetBSD: varargs.3,v 1.5 2003/04/16 16:11:19 wiz Exp $
2 .\"
3 .\" Copyright (c) 1990, 1991, 1993
4 .\"     The Regents of the University of California.  All rights reserved.
5 .\"
6 .\" This code is derived from software contributed to Berkeley by
7 .\" the American National Standards Committee X3, on Information
8 .\" Processing Systems.
9 .\"
10 .\" Redistribution and use in source and binary forms, with or without
11 .\" modification, are permitted provided that the following conditions
12 .\" are met:
13 .\" 1. Redistributions of source code must retain the above copyright
14 .\"    notice, this list of conditions and the following disclaimer.
15 .\" 2. Redistributions in binary form must reproduce the above copyright
16 .\"    notice, this list of conditions and the following disclaimer in the
17 .\"    documentation and/or other materials provided with the distribution.
18 .\" 3. Neither the name of the University nor the names of its contributors
19 .\"    may be used to endorse or promote products derived from this software
20 .\"    without specific prior written permission.
21 .\"
22 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
23 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
27 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
28 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
29 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
30 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
31 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .\" SUCH DAMAGE.
33 .\"
34 .\"     From:
35 .\"      (#)stdarg.3    8.1 (Berkeley) 6/5/93
36 .\"      NetBSD: stdarg.3,v 1.11 2002/02/04 18:27:38 kleink Exp
37 .\"
38 .Dd February 4, 2002
39 .Dt VARARGS 3
40 .Os
41 .Sh NAME
42 .Nm varargs
43 .Nd variable argument lists
44 .Sh SYNOPSIS
45 .In varargs.h
46 .Ft void
47 .Fn va_start "va_list ap"
48 .Ft type
49 .Fn va_arg "va_list ap" type
50 .Ft void
51 .Fn va_end "va_list ap"
52 .Sh DESCRIPTION
53 .Bf -symbolic
54 These historic interfaces are provided to support compilation of
55 existing programs only.
56 New code should use the
57 .Xr stdarg 3
58 interfaces.
59 .Ef
60 .Pp
61 A function may be called with a varying number of arguments of varying
62 types.
63 The include file
64 .Aq Pa varargs.h
65 declares a type
66 .Pq Em va_list
67 and defines three macros for stepping
68 through a list of arguments whose number and types are not known to
69 the called function.
70 .Pp
71 The called function must name an argument
72 .Fa va_alist ,
73 which marks the start of the variable argument list,
74 and which is naturally the last argument named.
75 It is declared by
76 .Fa va_dcl ,
77 which should not be followed by a semicolon.
78 The called function also must declare an object of type
79 .Em va_list
80 which is used by the macros
81 .Fn va_start ,
82 .Fn va_arg ,
83 and
84 .Fn va_end .
85 .Pp
86 The
87 .Fn va_start
88 macro initializes
89 .Fa ap
90 for subsequent use by
91 .Fn va_arg
92 and
93 .Fn va_end ,
94 and must be called first.
95 .Pp
96 It is possible for
97 .Fa va_alist
98 to be the only parameter to a function, resulting in it being possible
99 for a function to have no fixed arguments preceding the variable
100 argument list.
103 .Fn va_start
104 macro returns no value.
107 .Fn va_arg
108 macro expands to an expression that has the type and value of the next
109 argument in the call.
110 The parameter
111 .Fa ap
112 is the
113 .Em va_list Fa ap
114 initialized by
115 .Fn va_start .
116 Each call to
117 .Fn va_arg
118 modifies
119 .Fa ap
120 so that the next call returns the next argument.
121 The parameter
122 .Fa type
123 is a type name specified so that the type of a pointer to an
124 object that has the specified type can be obtained simply by
125 adding a *
127 .Fa type .
129 If there is no next argument, or if
130 .Fa type
131 is not compatible with the type of the actual next argument
132 (as promoted according to the default argument promotions),
133 random errors will occur.
135 The first use of the
136 .Fn va_arg
137 macro after that of the
138 .Fn va_start
139 macro returns the argument after
140 .Fa last .
141 Successive invocations return the values of the remaining
142 arguments.
145 .Fn va_end
146 macro handles a normal return from the function whose variable argument
147 list was initialized by
148 .Fn va_start .
151 .Fn va_end
152 macro returns no value.
153 .Sh EXAMPLES
154 The function
155 .Em foo
156 takes a string of format characters and prints out the argument
157 associated with each format character based on the type.
158 .Bd -literal -offset indent
159 void foo(fmt, va_alist)
160         char *fmt;
161         va_dcl
163         va_list ap;
164         int d;
165         char c, *p, *s;
167         va_start(ap);
168         while (*fmt) {
169                 switch (*fmt++) {
170                 case 's':                       /* string */
171                         s = va_arg(ap, char *);
172                         printf("string %s\en", s);
173                         break;
174                 case 'd':                       /* int */
175                         d = va_arg(ap, int);
176                         printf("int %d\en", d);
177                         break;
178                 case 'c':                       /* char */
179                         c = va_arg(ap, char);
180                         printf("char %c\en", c);
181                         break;
182                 }
183         }
184         va_end(ap);
187 .Sh SEE ALSO
188 .Xr stdarg 3
189 .Sh STANDARDS
190 These historic macros were replaced in
191 .St -ansiC
192 by the include file
193 .Aq Pa stdarg.h ;
195 .Xr stdarg 3
196 for its description.
197 .Sh COMPATIBILITY
198 These macros are
199 .Em not
200 compatible with the new macros they were replaced by.
201 In particular, it is not possible for a
202 .Em stdarg
203 function to have no fixed arguments.