C-Bibliotheksmakro -va_arg()

C-Standardbibliothek - <stdarg.h>

va_argDas Makro ist eine C-Standardbibliothek<stdarg.h>Ein Makro in der Header-Datei, das verwendet wird, um nacheinander den Wert jedes variablen Arguments in einer variadischen Funktion abzurufen. Es wird verwendet nachva_startMakro initialisiertva_listdie Variable, um auf das nächste Argument in der variablen Argumentliste zuzugreifen.

Deklaration

Nachfolgend ist die Deklaration des va_arg()-Makros aufgeführt.

type va_arg(va_list ap, type);

Parameter

  • va_list ap: einsva_listVariable vom Typ, die bereits durchlaufen wurdeva_startDas Makro initialisiert, wobei es auf die aktuelle Position in der variablen Argumentliste zeigt.
  • type: Der Typ des nächsten abzurufenden Arguments. Er muss ein Typ sein, der eindeutig identifiziert werden kann.

Rückgabewert

Gibt das nächste Argument in der aktuellen variablen Argumentliste mit dem Typ type zurück.

Verwendungsschritte

  • In einer variadischen Funktion verwenden Sieva_startMakroinitialisierungva_listVariable.
  • Nutzungva_argdas Makro zum sequenziellen Abrufen jedes variablen Arguments.
  • Nutzungva_endMakro-Bereinigungva_listVariable.

Beispiel

Das Folgende ist eine Verwendung vonva_argEin Beispielprogramm für das Makro, das eine variadische Funktion definiert, um die Summe einer variablen Anzahl von Argumenten zu berechnen:

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, wird verwendet, um Informationen über die variable Argumentliste zu speichern.
  • va_start(args, count);: initialisierenargs, um zuzugreifen aufcountdie variablen Argumente, die danach beginnen
  • total += va_arg(args, int);: Verwendenva_argDas Makro ruft das nächste variable Argument ab, wobei hier angenommen 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_argDas Makro sollteva_startDann verwenden Sie es, und beiva_endvorher verwendet.
  • typeDas Argument muss ein bestimmter Typ sein, und es sollte mit dem tatsächlichen Typ des variablen Arguments übereinstimmen.
  • Wenn beim Aufrufva_argWenn es die Anzahl der variablen Argumente überschreitet, ist das Verhalten undefiniert.
  • Nutzungva_endBereinigungva_listDie Variable ist notwendig, um potenzielle Ressourcenlecks oder undefiniertes Verhalten zu vermeiden.

C-Standardbibliothek - <stdarg.h>

Weitere Erweiterungen