Imported tab->space correction by redhat
[infodrom/manpages-de] / man3 / stdarg.3
1 .\" Copyright (c) 1990, 1991 The Regents of the University of California.
2 .\" All rights reserved.
3 .\"
4 .\" This code is derived from software contributed to Berkeley by
5 .\" the American National Standards Committee X3, on Information
6 .\" Processing Systems.
7 .\"
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
10 .\" are met:
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.
23 .\"
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
34 .\" SUCH DAMAGE.
35 .\"
36 .\"     @(#)stdarg.3    6.8 (Berkeley) 6/29/91
37 .\"
38 .\" Converted for Linux, Mon Nov 29 15:11:11 1993, faith@cs.unc.edu
39 .\" Translated to German Sun Jun 23 17:00:00 1996 by Patrick Rother <krd@gulu.net>
40 .\"
41 .TH STDARG 3  "23. Juni 1996" "BSD" "Bibliotheksfunktionen"
42 .SH BEZEICHNUNG
43 stdarg \- variable Argument-Listen
44 .SH ÜBERSICHT
45 .B #include <stdarg.h>
46 .sp
47 .BI "void va_start( va_list " ap ", " last );
48 .br
49 .BI "" type " va_arg( va_list " ap ", " type );
50 .br
51 .BI "void va_end( va_list " ap );
52 .SH BESCHREIBUNG
53 Eine Funktion darf mit einer veränderlchen Anzahl von Argumenten
54 veränderlichen Typs aufgerufen werden.  Die Include-Datei
55 .I stdarg.h
56 deklariert einen Typ
57 .B va_list
58 und definiert drei Makros, um eine Liste vor Argumenten durchzugehen,
59 deren Anzahl und Typen der aufgerufenen Funktion unbekannt sind.
60 .PP
61 Die aufgerufene Funktion muss ein Objekt des Typs 
62 .B va_list
63 deklarieren, welches von den Makros
64 .BR va_start ,
65 .BR va_arg ,
66 und
67 .BR va_end
68 benutzt wird.
69 .PP
70 Das Makro
71 .B va_start
72 initialisiert
73 .I ap
74 für spätere Benutzung durch
75 .B va_arg
76 und
77 .BR va_end ,
78 und muss zuerst aufgerufen werden.
79 .PP
80 Der Parameter
81 .I last
82 ist der Name des letzten Parameters vor der Liste der veränderlichen
83 Argumente, d.h. der letzte Parameter, dessen Typ die aufrufende Funktion
84 kennt.
85 .PP
86 Da die Adresse dieses Parameters in dem Makro
87 .B va_start
88 benutzt wird sollte er nicht als eine Registervariable, als Funktion
89 oder Array-Typ deklariert sein.
90 .PP
91 Das Makro
92 .B va_start
93 liefert keinen Wert zurück.
94 .PP
95 Das Makro
96 .B va_arg
97 expandiert zu einem Ausdruck, der den Typ und Wert des nächsten aufzurufenden
98 Argumentes hat.  Der Parameter
99 .I ap
100 ist
101 .BI va_list " " ap
102 initialisiert durch
103 .BR va_start .
104 Jeder Aufruf von
105 .B va_arg
106 verändert
107 .I ap
108 so dass der nächste Aufruf das nächste Argument zurückliefert.  Der
109 Parameter
110 .I type
111 ist ein Typenname, der so angegeben ist, dass der Typ eines Pointers auf
112 ein Objekt, das den angegebenen Typ hat, durch Hinzufügen eines * zu
113 .IR type
114 erhalten werden kann.
115 .PP
116 Wenn es kein weiteres Argument gibt, oder wenn
117 .I type
118 nicht kompatibel mit dem Typ des nächsten Argumentes ist,
119 erscheinen zufällige Fehler.
120 .PP
121 Die erste Benutzung des Makros
122 .B va_arg
123 nach
124 .B va_start
125 liefert das Argument nach
126 .IR last
127 zurück.
128 Folgende Aufrufe geben die Werte der verbleibenden Argumente zurück.
129 .PP
130 Das Makro
131 .B va_end
132 ermöglicht eine normale Rückkehr aus der Funktion dessen variable
133 Argumentliste durch
134 .BR va_start
135 initialisiert wurde.
136 .PP
137 Das Makro
138 .B va_end
139 liefert keinen Wert zurück.
140 .SH BEISPIELE
141 Die Funktion
142 .I foo
143 nimmt einem String von Format-Zeichen und gibt das Argument aus, das
144 mit jedem Format-Zeichen in Zusammenhang gebracht wird, basierend auf dem Typ.
145 .RS
146 .nf
147 void foo(char *fmt, ...)
148 {
149         va_list ap;
150         int d;
151         char c, *p, *s;
152
153         va_start(ap, fmt);
154         while (*fmt)
155                 switch(*fmt++) {
156                 case 's':                       /* string */
157                         s = va_arg(ap, char *);
158                         printf("string %s\en", s);
159                         break;
160                 case 'd':                       /* int */
161                         d = va_arg(ap, int);
162                         printf("int %d\en", d);
163                         break;
164                 case 'c':                       /* char */
165                         c = va_arg(ap, char);
166                         printf("char %c\en", c);
167                         break;
168                 }
169         va_end(ap);
170 }
171 .fi
172 .RE
173 .SH STANDARDS
174 Die Makros
175 .BR va_start ,
176 .BR va_arg ,
177 und
178 .B va_end
179 sind konform zu ANSI C3.159-1989 (``ANSI C'').
180 .SH KOMPATIBILITÄT
181 Diese Makros sind
182 .I not
183 kompatibel mit den historischen Makros, die sie ersetzen.  Eine
184 abwärtskompatible Version kann in der Includedatei
185 .IR varargs.h
186 gefunden werden.
187 .SH BUGS
188 Im Gegensatz zu den Makros
189 .B varargs
190 erlauben die Makros
191 .B stdarg
192 dem Programmierer nicht, eine Funktion ohne feste Argumente zu implementieren.
193 Dieses Problem macht hauptsächlich Arbeit wenn man Code mit 
194 .B varargs
195 nach 
196 .B stdarg
197 konvertiert, aber es erzeugt auch Schwierigkeiten bei veränderlichen
198 Funktionen die wünschen, ihre Argumente an eine Funktion weiterzugeben,
199 die ein Argument
200 .B va_list
201 nimmt, wie
202 .BR vfprintf (3).