Was bedeuten die drei Punkte in der Parameterliste einer Funktion?

Lesezeit: 2 Minuten

Benutzeravatar von ashishsony
Ashishsony

Ich stieß auf eine Funktionsdefinition wie:

char* abc(char *f, ...)
{
}

Was bedeuten die drei Punkte?

  • Danke an alle für die schnelle Antwort … diese Community ist einfach großartig …

    – Aschischson

    1. März 2009 um 13:02 Uhr

Benutzeravatar von paxdiablo
paxdiablo

Diese Art von Funktionen werden aufgerufen variadische Funktionen (Wikipedia-Link). Sie verwenden Ellipsen (dh drei Punkte), um anzuzeigen, dass es eine variable Anzahl von Argumenten gibt, die die Funktion verarbeiten kann. Eine Stelle, an der Sie solche Funktionen wahrscheinlich verwendet haben (vielleicht ohne es zu merken), sind die verschiedenen printf Funktionen, zum Beispiel (aus der ISO-Norm):

int printf(const char * restrict format, ...);

Mit den Ellipsen können Sie Funktionen erstellen, bei denen die Anzahl der Parameter im Voraus nicht bekannt ist und die Sie verwenden können stdargs.h Funktionen (va_start, va_arg und va_end), um die spezifischen Argumente zu erhalten.

Die muss man kennen Typen der Argumente, die Sie extrahieren, und haben eine Möglichkeit zu entscheiden, wann Sie fertig sind. Das printf Funktionen tun dies mit der Formatzeichenfolge (für Typen und Anzahl), während mein Beispielcode unten immer davon ausgeht const char * als Typ mit einem Sentinel-Wert NULL Fertigstellung zu entscheiden.

Dieser Link hier hat eine gute Abhandlung über die Verwendung von variablen Argumentlisten in printf.


Als Beispiel enthält das folgende Programm eine Funktion outStrings()mit dem Sie eine beliebige Anzahl von Zeichenfolgen drucken können:

#include <stdio.h>
#include <stdarg.h>

void outStrings(const char *strFirst, ...) {
    // First argument handled specially.

    printf("%s", strFirst);
    va_list pArg;
    va_start(pArg, strFirst);

    // Just get and process each string until NULL given.

    const char *strNext = va_arg(pArg, const char *);
    while (strNext != NULL) {
        printf("%s", strNext);
        strNext = va_arg(pArg, const char *);
    }

    // Finalise processing.

    va_end(pArg);
}

int main(void) {
    char *name = "paxdiablo";
    outStrings("Hello, ", name, ", I hope you're feeling well today.\n", NULL);
}

Wikipedia auf vararg-Funktionen in C++.

Sie werden als Auslassungspunkte bezeichnet und bedeuten, dass die Funktion eine unbestimmte Anzahl von Parametern annehmen kann. Ihre Funktion kann wahrscheinlich so aufgerufen werden:

abc( "foo", 0 );
abc( "foo", "bar", 0 );

Es muss eine Möglichkeit geben, das Ende der Liste anzuzeigen. Dies kann durch Verwendung des ersten Parameters als ion einer printf(0-Formatzeichenfolge oder durch ein spezielles Abschlusszeichen, im obigen Beispiel Null, erfolgen.

Funktionen mit einer variablen Anzahl von Parametern gelten in C++ als schlechte Form, da keine Typprüfung oder benutzerdefinierte Konvertierungen an den Parametern durchgeführt werden können.

Dies wird in C als Varargs-Funktion oder Variable-Argument-Funktion bezeichnet.

Eines, das Sie wahrscheinlich erkennen werden, ist printf.

1414490cookie-checkWas bedeuten die drei Punkte in der Parameterliste einer Funktion?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy