C-Bibliotheksmakro -va_start()

C-Standardbibliothek - <stdarg.h>

Beschreibung

va_startMakros sind Bestandteil der C-Standardbibliothek.<stdarg.h>Ein Makro in einer Header-Datei, das verwendet wird, um eineva_listVariable zu initialisieren, sodass in einer variadischen Funktion auf die Anzahl der variadischen Argumente zugegriffen werden kann.

C-Bibliotheksmakrovoid va_start(va_list ap, last_arg)InitialisiertapVariable, dieva_argundva_endMakros werden zusammen verwendet.last_argist der letzte bekannte feste Parameter, der an die Funktion übergeben wird, d. h. der Parameter vor den Auslassungspunkten.

Dieses Makro muss verwendet werden, bevorva_argundva_endaufgerufen wurden.

Deklaration

Nachfolgend die Deklaration des Makros va_start().

void va_start(va_list ap, last);

Parameter

  • va_list ap: Dies ist ein Typ, der für den Zugriff auf variadische Argumente verwendet wird. Er wird nach dem Makroaufruf initialisiert und in nachfolgendemva_argAbrufen von Argumenten in einem Aufruf.
  • last: Dies ist der letzte bekannte feste Parameter vor der Liste der variadischen Argumente. Das heißt, der letzte Parameter in der Funktionsparameterliste, bevor die variadischen Argumente beginnen.

Rückgabewert

N/V

Verwendungsschritte

  1. Um eine variadische Funktion zu definieren, muss es mindestens einen festen Parameter geben (d. h.,lastParameter).
  2. Deklariere einenva_listEine Variable, die zum Speichern von Informationen über die variadische Argumentliste verwendet wird.
  3. Nutzungva_startMakroinitialisierungva_listVariable.
  4. Nutzungva_argDas Makro ruft jedes variable Argument der Reihe nach ab.
  5. Nutzungva_endMakro-Bereinigungva_listVariable.

Beispiel

Das folgende Beispiel veranschaulicht die Verwendung des Makros va_start().

Beispiel

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

// Variadische Funktion, berechnet die Summe der Argumente
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // args initialisieren, um auf variadische Argumente zuzugreifen
    va_start(args, count);

    // Jedes variadische Argument nacheinander abrufen und zu total addieren
    for (int i = 0; i < count; i++) {
        total += va_arg(args, int);
    }

    // args aufräumen
    va_end(args);

    return total;
}

int main() {
    printf("Summe von 1, 2, 3: %d\n", sum(3, 1, 2, 3));  // Ausgabe 6
    printf("Summe von 4, 5, 6, 7: %d\n", sum(4, 4, 5, 6, 7));  // Ausgabe 22
    return 0;
}

Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:

Sum of 1, 2, 3: 6
Sum of 4, 5, 6, 7: 22

Parsen

  • va_list args;: deklariere eineva_listVariable vom Typargs, verwendet, um Informationen über die variadische Argumentliste zu speichern.
  • va_start(args, count);: initialisierenargs, um zuzugreifen aufcountVariable Argumente, die danach beginnen.
  • total += va_arg(args, int);: Verwendenva_argDas Makro ruft das nächste variadische Argument ab, wobei davon ausgegangen wird, dass sie alleintvom Typ sind und es intotalder Variablen akkumulieren.
  • va_end(args);: Aufräumenargs, um Ressourcen freizugeben und undefiniertes Verhalten zu vermeiden.

Hinweise

  • va_startmuss mitva_list、va_argundva_endWird zusammen verwendet.
  • Aufrufva_startDanach müssen Sie aufrufenva_endum die Verarbeitung variabler Argumente zu beenden.
  • Beim Aufrufva_startVorher müssen Sie sicherstellen, dass die Parameterliste der Funktion mindestens einen festen Parameter enthält.
  • lastDer Parameter ist der letzte feste Parameter vor der variadischen Argumentliste und wird verwendet, um zu bestimmen, wo mit der Verarbeitung der variadischen Argumente begonnen wird.

C-Standardbibliothek - <stdarg.h>

Weitere Erweiterungen