add uucpd to man page
[unix-history] / usr / src / share / man / man3 / stdarg.3
CommitLineData
15daeeaf 1.\" @(#)stdarg.3 6.1 (Berkeley) %G%
41a44cfa 2.\"
15daeeaf 3.TH VARARGS 3 ""
41a44cfa
KM
4.AT 3
5.SH NAME
6varargs \- variable argument list
7.SH SYNOPSIS
4d575989
KM
8.B "#include <varargs.h>"
9.PP
10.I function\c
11.RB ( va_alist )
12.br
13.B va_dcl
14.br
15.B va_list
16.IR pvar ;
17.br
18.B va_start\c
19.RI ( pvar );
20.br
21f =
22.B va_arg\c
23.RI ( pvar ,
24.IR type );
25.br
26.B va_end\c
27.RI ( pvar );
41a44cfa 28.SH DESCRIPTION
4d575989
KM
29This set of macros provides a means of writing portable procedures that
30accept variable argument lists.
31Routines having variable argument lists (such as
32.IR printf (3))
41a44cfa
KM
33that do not use varargs are inherently nonportable, since different
34machines use different argument passing conventions.
35.PP
36.B va_alist
37is used in a function header to declare a variable argument list.
38.PP
39.B va_dcl
4d575989
KM
40is a declaration for
41.BR va_alist .
41a44cfa
KM
42Note that there is no semicolon after
43.B va_dcl.
44.PP
45.B va_list
46is a type which can be used for the variable
4d575989 47.IR pvar ,
41a44cfa
KM
48which is used to traverse the list.
49One such variable must always be declared.
50.PP
4d575989 51.B va_start\c
41a44cfa
KM
52.RI (pvar)
53is called to initialize
54.I pvar
55to the beginning of the list.
56.PP
4d575989
KM
57.B va_arg\c
58.RI ( pvar ,
59.IR type )
60will return the next argument in the list pointed to by
41a44cfa
KM
61.IR pvar .
62.I Type
63is the type the argument is expected to be.
64Different types can be mixed, but it is up
65to the routine to know what type of argument is
66expected, since it cannot be determined at runtime.
67.PP
4d575989 68.B va_end\c
41a44cfa
KM
69.RI ( pvar )
70is used to finish up.
71.PP
4d575989 72Multiple traversals, each bracketed by
41a44cfa 73.B va_start
4d575989 74\&...
41a44cfa
KM
75.B va_end,
76are possible.
77.SH EXAMPLE
78.nf
79 \fB#include\fP <varargs.h>
80 execl(\fBva_alist\fP)
81 \fBva_dcl\fP
82 {
83 \fBva_list\fP ap;
84 \fBchar\fP *file;
85 \fBchar\fP *args[100];
86 \fBint\fP argno = 0;
87
88 \fBva_start\fP(ap);
89 file = \fBva_arg(ap, \fBchar\fP *);
90 \fBwhile\fP (args[argno++] = \fBva_arg\fP(ap, \fBchar\fP *))
91 \fB;\fP
92 \fBva_end\fP(ap);
93 \fBreturn\fP execv(file, args);
94 }
95.fi
96.SH BUGS
97It is up to the calling routine to determine how many arguments
98there are, since it is not possible to determine this from the
99stack frame. For example,
100.I execl
101passes a 0 to signal the end of the list.
102.I Printf
4d575989 103can tell how many arguments are supposed to be there by the format.