Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ varargs(5) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

exec(2)

printf(3S)

vprintf(3S)

stdarg(5)

varargs(5)                                                       varargs(5)

NAME
     varargs - Variable Argumentenlisten bearbeiten

SYNTAX
     #include <varargs.h>

     vaalist
     vadcl
     valist pvar;
     void vastart(valist pvar);
     type vaarg(valist pvar, type);
     void vaend(valist pvar);

BESCHREIBUNG
     Dieser Satz von Makros ermöglicht das Schreiben portabler Prozeduren,
     die variable Argumentenlisten akzeptieren. Funktionen, die variable
     Argumentenlisten aufweisen [wie z. B. printf(3S)], jedoch varargs.h
     nicht verwenden, sind von Natur aus nicht portabel, da verschiedene
     Maschinen verschiedene Methoden zum Weitergeben von Argumenten verwen-
     den.

     Die folgenden Datentypen werden in varargs.h definiert:

     vaalist    wird als Parameterliste in einem Funktionskopf verwendet.

     vadcl      ist eine Deklaration für vaalist Auf vadcl darf kein
                 Semikolon folgen.

     valist     ist ein Typ, der für die Variable definiert ist, die zum
                 Durchlaufen der Liste verwendet wird.

     Folgende Makros sind in varargs.h enthalten:

     vastart()  wird zum Initialisieren von pvar auf den Anfang der Liste
                 aufgerufen.

     vaarg()    gibt das nächste Argument in der Liste zurück, auf das
                 pvar weist. type ist der Typ, den das Argument darstellen
                 soll. Verschiedene Typen können gemischt werden, doch ist
                 es dann der Funktion überlassen zu wissen, welcher Argu-
                 menttyp erwartet wird, da dies nicht zur Laufzeit ermit-
                 telt werden kann.

     vaend()    wird zum abschließenden Aufräumen verwendet.

     Mehrfache Durchgänge sind möglich, wobei jeder Durchgang mit
     vastart() und vaend() umschlossen ist.








Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

varargs(5)                                                       varargs(5)

BEISPIELE
     Dieses Beispiel zeigt eine mögliche Realisierung von execl [siehe
     exec(2)].

        #include <unistd.h>
        #include <varargs.h>
        #define MAXARGS      100
     /* execl wird aufgerufen mit execl(file, arg1, arg2, ..., (char *)0); */
        execl(vaalist)
        vadcl
        {
           valist ap;
           char *file;
           char *args[MAXARGS];       /* angenommen, es ist groß genug */
           int argno = 0;
           vastart(ap);
           file = vaarg(ap, char *);
           while ((args[argno++] = vaarg(ap, char *)) != 0);
           vaend(ap);
           return execv(file, args);
         }

HINWEISE
     Die Angabe der Anzahl der vorliegenden Argumente ist Aufgabe der auf-
     rufenden Funktion, da die Bestimmung der Anzahl der Argumente nicht
     immer vom Stapelrahmen des Laufzeitkellers aus möglich ist. So wird
     beispielsweise ein Nullzeiger zum Signalisieren des Endes der Liste an
     execl() weitergegeben. printf() kann anhand des Formats feststellen,
     wieviele Argumente vorliegen.

     Die Angabe eines zweiten Arguments vom Typ char, short oder float für
     vaarg() ist nicht portabel, da die von der aufgerufenen Funktion
     gesehenen Argumente nicht char, short oder float sind. C wandelt char-
     und short-Argumente in int- und float-Argumente in double um, bevor
     diese an eine Funktion übergeben werden.

     varargs.h wird aus Gründen der Kompatibilität zu vorhergehenden Ver-
     sionen zur Verfügung gestellt. Verwenden Sie lieber stdarg.h.

SIEHE AUCH
     exec(2), printf(3S), vprintf(3S), stdarg(5).













Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026