Loading...
--- Libc/Libc-763.13/man/stdarg.3
+++ Libc/Libc-498.1.1/man/stdarg.3
@@ -1,3 +1,5 @@
+.\" $NetBSD: stdarg.3,v 1.3 1994/11/30 15:24:37 jtc Exp $
+.\"
.\" Copyright (c) 1990, 1991, 1993
.\" The Regents of the University of California. All rights reserved.
.\"
@@ -34,29 +36,26 @@
.\" SUCH DAMAGE.
.\"
.\" @(#)stdarg.3 8.1 (Berkeley) 6/5/93
-.\" $FreeBSD: src/share/man/man3/stdarg.3,v 1.15 2005/01/21 08:36:36 ru Exp $
-.\"
-.Dd October 25, 2002
+.\"
+.Dd June 5, 1993
.Dt STDARG 3
.Os
.Sh NAME
.Nm stdarg
.Nd variable argument lists
.Sh SYNOPSIS
-.In stdarg.h
+.Fd #include <stdarg.h>
.Ft void
.Fn va_start "va_list ap" last
.Ft type
.Fn va_arg "va_list ap" type
-.Ft void
-.Fn va_copy "va_list dest" "va_list src"
.Ft void
.Fn va_end "va_list ap"
.Sh DESCRIPTION
A function may be called with a varying number of arguments of varying
types.
The include file
-.In stdarg.h
+.Aq Pa stdarg.h
declares a type
.Pq Em va_list
and defines three macros for stepping
@@ -68,37 +67,32 @@
which is used by the macros
.Fn va_start ,
.Fn va_arg ,
-.Fn va_copy ,
and
.Fn va_end .
.Pp
The
.Fn va_start
-macro must be called first, and it initializes
-.Fa ap ,
-which can be passed to
-.Fn va_arg
-for each argument to be processed.
-Calling
-.Fn va_end
-signals that there are no further arguments, and causes
+macro initializes
.Fa ap
-to be invalidated.
-Note that each call to
-.Fn va_start
-must be matched by a call to
+for subsequent use by
+.Fn va_arg
+and
.Fn va_end ,
-from within the same function.
+and must be called first.
.Pp
The parameter
.Fa last
is the name of the last parameter before the variable argument list,
-i.e., the last parameter of which the calling function knows the type.
+i.e. the last parameter of which the calling function knows the type.
.Pp
Because the address of this parameter is used in the
.Fn va_start
macro, it should not be declared as a register variable, or as a
function or an array type.
+.Pp
+The
+.Fn va_start
+macro returns no value.
.Pp
The
.Fn va_arg
@@ -106,11 +100,11 @@
argument in the call.
The parameter
.Fa ap
-is the
+is the
.Em va_list Fa ap
initialized by
.Fn va_start .
-Each call to
+Each call to
.Fn va_arg
modifies
.Fa ap
@@ -118,7 +112,7 @@
The parameter
.Fa 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
+object that has the specified type can be obtained simply by
adding a *
to
.Fa type .
@@ -131,47 +125,22 @@
.Pp
The first use of the
.Fn va_arg
-macro after that of the
-.Fn va_start
-macro returns the argument after
+macro after that of the
+.Fn va_start
+macro returns the argument after
.Fa last .
Successive invocations return the values of the remaining
arguments.
.Pp
The
-.Fn va_copy
-macro copies the state of the variable argument list,
-.Fa src ,
-previously initialized by
-.Fn va_start ,
-to the variable argument list,
-.Fa dest ,
-which must not have been previously initialized by
-.Fn va_start ,
-without an intervening call to
-.Fn va_end .
-The state preserved in
-.Fa dest
-is equivalent to calling
-.Fn va_start
-and
-.Fn va_arg
-on
-.Fa dest
-in the same way as was used on
-.Fa src .
-The copied variable argument list can subsequently be passed to
-.Fn va_arg ,
-and must finally be passed to
.Fn va_end
-when through with it.
-.Pp
-After a variable argument list is invalidated by
-.Fn va_end ,
-it can be reinitialized with
-.Fn va_start
-or made a copy of another variable argument list with
-.Fn va_copy .
+macro handles a normal return from the function whose variable argument
+list was initialized by
+.Fn va_start .
+.Pp
+The
+.Fn va_end
+macro returns no value.
.Sh EXAMPLES
The function
.Em foo
@@ -180,12 +149,11 @@
.Bd -literal -offset indent
void foo(char *fmt, ...)
{
- va_list ap, ap2;
+ va_list ap;
int d;
- char c, *s;
+ char c, *p, *s;
va_start(ap, fmt);
- va_copy(ap2, ap);
while (*fmt)
switch(*fmt++) {
case 's': /* string */
@@ -197,45 +165,39 @@
printf("int %d\en", d);
break;
case 'c': /* char */
- /* Note: char is promoted to int. */
- c = va_arg(ap, int);
+ c = va_arg(ap, char);
printf("char %c\en", c);
break;
}
va_end(ap);
- ...
- /* use ap2 to iterate over the arguments again */
- ...
- va_end(ap2);
}
.Ed
+.Sh STANDARDS
+The
+.Fn va_start ,
+.Fn va_arg ,
+and
+.Fn va_end
+macros conform to
+.St -ansiC .
.Sh COMPATIBILITY
These macros are
.Em not
compatible with the historic macros they replace.
A backward compatible version can be found in the include
-file
-.In varargs.h .
-.Sh STANDARDS
-The
-.Fn va_start ,
-.Fn va_arg ,
-.Fn va_copy ,
-and
-.Fn va_end
-macros conform to
-.St -isoC-99 .
+file
+.Aq Pa varargs.h .
.Sh BUGS
Unlike the
.Em varargs
macros, the
-.Nm
+.Nm stdarg
macros do not permit programmers to
code a function with no fixed arguments.
This problem generates work mainly when converting
.Em varargs
code to
-.Nm
+.Nm stdarg
code,
but it also creates difficulties for variadic functions that
wish to pass all of their arguments on to a function