Bibliothèque standard C -<stdarg.h>

<stdarg.h>est un fichier d'en-tête de la bibliothèque standard C, fournissant un ensemble de macros pour accéder à un nombre variable d'arguments.

stdarg.hLe fichier d'en-tête définit un type de variableva_listet trois macros, qui peuvent être utilisées pour obtenir les arguments dans une fonction lorsque le nombre d'arguments est inconnu (c'est-à-dire lorsque le nombre d'arguments est variable).

Les fonctions à arguments variables utilisent généralement une ellipse à la fin de la liste des paramètres....défini.

Variables de la bibliothèque

Voici les types de variables définis dans le fichier d'en-tête stdarg.h :

Numéro de sérieVariables et description
1va_list
Ceci s'applique àva_start()、va_arg()etva_end()Le type dans lequel ces trois macros stockent des informations. Le type utilisé pour stocker les informations sur les arguments variables.

Macros de bibliothèque

Voici les macros définies dans le fichier d'en-tête stdarg.h :

Numéro de sérieMacros & Description
1void va_start(va_list ap, last_arg)
Cette macro initialiseapvariable, queva_argetva_endLes macros sont utilisées ensemble.last_argest le dernier paramètre fixe connu passé à la fonction, c'est-à-dire le paramètre avant les points de suspension.
2type va_arg(va_list ap, type)
Cette macro récupère un argument de typetypedans le paramètre suivant.
3void va_end(va_list ap)
Cette macro est désormais disponible à l'utilisationva_startUne fonction à arguments variables retourne via la macro. Si elle n'est pas appelée avant de retourner de la fonctionva_end, le résultat est indéfini.

Exemple

Ce qui suit est un exemple utilisant<stdarg.h>Un exemple d'implémentation d'une fonction variadique. Cette fonction calcule la somme de tous les paramètres :

Exemple

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

// Calculer la somme des arguments variables
int sum(int count, ...) {
    int total = 0;
    va_list args;
   
    // Initialiser args pour accéder aux arguments variadiques
    va_start(args, count);
   
    // Accéder aux arguments variables un par un
    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;
}

Sortie :

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

Analyse syntaxique

  • va_list args;: déclarer uneva_listVariable, utilisée pour accéder aux arguments variadiques.
  • va_start(args, count);: initialiserargsPour parcourir la liste d'arguments variadiques, à partir decountLe premier paramètre après cela.
  • total += va_arg(args, int);: Obtenir le paramètre suivant dans la liste d'arguments variables et l'accumuler danstotal. Le type du paramètre estint。
  • va_end(args);: nettoyerargs。

Notes

  • Le type de chaque argument dans la liste d'arguments variables doit être explicite et doit être transmis de manière cohérente àva_arg。
  • Utilisationva_startEnsuite, il faut utiliserva_endnettoyageva_listvariable.
  • va_start、va_argetva_endLes macros doivent être utilisées par paires dans une fonction afin d'éviter un comportement indéfini.
autres extensions