summaryrefslogtreecommitdiff
path: root/static/v10/man3/varargs.3
diff options
context:
space:
mode:
Diffstat (limited to 'static/v10/man3/varargs.3')
-rw-r--r--static/v10/man3/varargs.389
1 files changed, 89 insertions, 0 deletions
diff --git a/static/v10/man3/varargs.3 b/static/v10/man3/varargs.3
new file mode 100644
index 00000000..1bd46763
--- /dev/null
+++ b/static/v10/man3/varargs.3
@@ -0,0 +1,89 @@
+.TH VARARGS 3
+.CT 2 data_man
+.SH NAME
+varargs \(mi variable argument list
+.SH SYNOPSIS
+.nf
+.B #include <varargs.h>
+.IB function (va_alist)
+.B va_dcl
+.PP
+.B va_list pvar;
+.PP
+.B va_start(pvar);
+.PP
+.B va_arg(pvar, type);
+.PP
+.B va_end(pvar);
+.fi
+.SH DESCRIPTION
+This set of macros allows portable procedures that accept variable
+argument lists to be written.
+Routines which have variable argument lists (such as
+.IR printf (3))
+that do not use varargs are inherently nonportable, since different
+machines use different argument passing conventions.
+.PP
+The literal identifier
+.I va_alist
+is used in a function header to declare a variable argument list.
+It is declared by
+.I va_dcl.
+Note that there is no semicolon after
+.I va_dcl.
+.PP
+.B Va_list
+is the type of the variable
+.I pvar,
+which is used to traverse the list.
+One variable of this type must always be declared.
+.PP
+.I Va_start
+initializes
+.I pvar
+to the beginning of the list.
+.PP
+.I Va_arg
+returns the next argument in the list
+pointed to by
+.IR pvar .
+.I Type
+is the type the argument is expected to be.
+Different types can be mixed, but it is up
+to the routine to know what type is
+expected, since it cannot be determined at runtime.
+.PP
+.I Va_end
+is used to finish up.
+.PP
+Multiple traversals, each bracketed by
+.I va_start
+and
+.I va_end,
+are possible.
+.SH EXAMPLES
+How to define
+.I execl
+in terms of
+.IR execv ;
+see
+.IR exec (2):
+.IP
+.nf
+.ft L
+#include <varargs.h>
+execl(va_alist)
+va_dcl
+{
+ va_list ap;
+ char *file;
+ char *args[100];
+ int argno = 0;
+ va_start(ap);
+ file = va_arg(ap, char*);
+ while(args[argno++] = va_arg(ap, char*));
+ va_end(ap);
+ execv(file, args);
+}
+.fi
+.ft P