Maison > développement back-end > C++ > Comment transmettre des arguments variables entre des fonctions C avec des listes d'arguments variables ?

Comment transmettre des arguments variables entre des fonctions C avec des listes d'arguments variables ?

Mary-Kate Olsen
Libérer: 2024-12-12 12:32:13
original
480 Les gens l'ont consulté

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

Comment transmettre des arguments variables entre des fonctions avec des listes d'arguments variables

Problème :

Vous avez deux fonctions, exemple ( ) et exampleB(), avec des listes d'arguments variables similaires :

void example(int a, int b, ...);
void exampleB(int b, ...);
Copier après la connexion

Vous devez appeler example() depuis l'intérieur exampleB() sans modifier la liste d'arguments variables de cette dernière, comme elle est utilisée ailleurs.

Solution :

Malheureusement, il n'existe pas de méthode directe pour passer des arguments variables en C . Pour y parvenir, vous devez définir une fonction d'assistance qui prend un paramètre va_list. Voici un exemple :

#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...
}
Copier après la connexion

Dans cette configuration :

  • exampleV() est la fonction d'assistance qui prend un argument va_list.
  • do_something(a) est un exemple d'utilisation de l'argument a dans exampleA().
  • exampleV() est appelé à la fois depuis exampleA() et exampleB() avec la liste d'arguments variables correspondante.
  • exampleV() effectue les opérations initialement prévues pour exampleB() mais n'appelle pas va_start() ou va_end().

Par en ajoutant exampleV() comme intermédiaire, vous pouvez transmettre les arguments variables à exampleB() sans modifier son implémentation d'origine.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal