Macro de la bibliothèque C -va_arg()

Bibliothèque standard C - <stdarg.h>

va_argLa macro est une bibliothèque standard C<stdarg.h>Une macro dans le fichier d'en-tête, utilisée pour récupérer séquentiellement la valeur de chaque argument variable dans une fonction variadique. Elle est utilisée aprèsva_startMacro initialiséeva_listla variable, pour accéder à l'argument suivant dans la liste d'arguments variables.

Déclaration

Ci-dessous se trouve la déclaration de la macro va_arg().

type va_arg(va_list ap, type);

Paramètre

  • va_list ap: unva_listvariable de type, qui a déjà été passée parva_startLa macro initialise, en pointant vers la position actuelle dans la liste d'arguments variables.
  • type: Le type de l'argument suivant à récupérer. Il doit s'agir d'un type qui peut être clairement identifié.

Valeur de retour

Renvoie l'argument suivant dans la liste d'arguments variables actuelle, avec le type type.

Étapes d'utilisation

  • Dans une fonction variadique, utilisezva_startInitialisation de la macrova_listvariable.
  • Utilisationva_argla macro pour obtenir séquentiellement chaque argument variable.
  • Utilisationva_endNettoyage de macrova_listvariable.

Exemple

Ce qui suit est une utilisation deva_argUn exemple de programme pour la macro, qui définit une fonction variadique pour calculer la somme d'un nombre variable d'arguments :

Exemple

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

// Fonction variadique, calcule la somme des arguments
int sum(int count, ...) {
    int total = 0;
    va_list args;

    // Initialiser args pour accéder aux arguments variadiques
    va_start(args, count);

    // Obtenir chaque argument variadique un par un et l'ajouter à total
    for (int i = 0; i < count; i++) {
        total += va_arg(args, int);
    }

    // Nettoyer args
    va_end(args);

    return total;
}

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

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

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

Analyse syntaxique

  • va_list args;: déclarer uneva_listvariable de typeargs, utilisée pour stocker des informations sur la liste d'arguments variables.
  • va_start(args, count);: initialiserargspour accéder depuiscountles arguments variables qui commencent après
  • total += va_arg(args, int);: Utiliserva_argLa macro récupère l'argument variable suivant, en supposant ici qu'ils sont tousintde type, et l'accumuler danstotaldans la variable.
  • va_end(args);: nettoyerargs, afin de libérer les ressources et d'éviter un comportement indéfini.

Notes

  • va_argLa macro doit êtreva_startEnsuite, utilisez-le, et àva_endutilisé au préalable.
  • typeL'argument doit être d'un type défini, et il doit correspondre au type réel de l'argument variable.
  • Si l'on appelleva_argLorsqu'il dépasse le nombre d'arguments variables, le comportement est indéfini.
  • Utilisationva_endnettoyageva_listLa variable est nécessaire pour éviter d'éventuelles fuites de ressources ou un comportement indéfini.

Bibliothèque standard C - <stdarg.h>

autres extensions