Übergabe variabler Argumente an Funktionen mit Listen variabler Argumente
Betrachten Sie zwei Funktionen mit ähnlichen variablen Argumenten:
void example(int a, int b, ...); void exampleB(int b, ...);
Angenommen, example ruft exampleB auf, ohne jedoch exampleB zu ändern (das an anderer Stelle verwendet wird). Wie können wir die Variablenargumente von Beispiel an BeispielB übergeben?
Lösung:
Die direkte Übergabe von Argumenten ist nicht möglich. Stattdessen erstellen wir eine Wrapper-Funktion, die eine va_list akzeptiert:
#include <stdarg.h> static void exampleV(int b, va_list args);
Modified Function exampleA:
void exampleA(int a, int b, ...) // Renamed for consistency { va_list args; do_something(a); // Use argument a somehow va_start(args, b); exampleV(b, args); va_end(args); }
Unmodified Function exampleB:
void exampleB(int b, ...) { va_list args; va_start(args, b); exampleV(b, args); va_end(args); }
Wrapper-Funktion exampleV:
static void exampleV(int b, va_list args) { // Whatever `exampleB` was intended to do... // Except it doesn't call either `va_start` or `va_end`. }
Dieser Ansatz ermöglicht es uns, die Variablenargumente von example an exampleB zu übergeben, ohne Letzteres zu ändern. Die Wrapper-Funktion exampleV ruft weder va_start noch va_end auf, was die Konsistenz mit der bestehenden Verwendung von exampleB gewährleistet.
Das obige ist der detaillierte Inhalt vonWie kann ich variable Argumente von einer Funktion an eine andere übergeben, ohne die empfangende Funktion zu ändern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!