Heim >Backend-Entwicklung >C++ >Wie übergebe ich variable Argumente zwischen C-Funktionen mit Listen variabler Argumente?

Wie übergebe ich variable Argumente zwischen C-Funktionen mit Listen variabler Argumente?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-12 12:32:13399Durchsuche

How to Pass Variable Arguments Between C Functions with Variable Argument Lists?

So übergeben Sie variable Argumente zwischen Funktionen mit variablen Argumentlisten

Problem:

Sie haben zwei Funktionen, Beispiel( ) und exampleB(), mit ähnlichen variablen Argumentlisten:

void example(int a, int b, ...);
void exampleB(int b, ...);

Sie müssen example() aus exampleB() heraus aufrufen, ohne Änderungen vorzunehmen die Liste der variablen Argumente des letzteren, wie sie anderswo verwendet wird.

Lösung:

Leider gibt es keine direkte Methode, um variable Argumente in C zu übergeben. Um dies zu erreichen, Sie müssen eine Hilfsfunktion definieren, die einen va_list-Parameter akzeptiert. Hier ist ein Beispiel:

#include <stdarg.h>

static void exampleV(int b, va_list args);

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);
}

void exampleB(int b, ...)
{
    va_list args;
    va_start(args, b);
    exampleV(b, args);
    va_end(args);
}

static void exampleV(int b, va_list args)
{
    ...whatever you planned to have exampleB do...
    ...except it calls neither va_start nor va_end...
}

In diesem Setup:

  • exampleV() ist die Hilfsfunktion, die ein va_list-Argument akzeptiert.
  • do_something(a) ist ein Beispiel für die Verwendung des Arguments a in exampleA().
  • exampleV() wird sowohl von exampleA() als auch aufgerufen exampleB() mit der entsprechenden Variablenargumentliste.
  • exampleV() führt die ursprünglich für exampleB() vorgesehenen Operationen aus, ruft jedoch weder va_start() noch va_end() auf.

By Wenn Sie exampleV() als Vermittler hinzufügen, können Sie die Variablenargumente an exampleB() übergeben, ohne die ursprüngliche Implementierung zu ändern.

Das obige ist der detaillierte Inhalt vonWie übergebe ich variable Argumente zwischen C-Funktionen mit Listen variabler Argumente?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn