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érie | Variables et description |
|---|---|
| 1 | va_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érie | Macros & Description |
|---|---|
| 1 | void 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. |
| 2 | type va_arg(va_list ap, type) Cette macro récupère un argument de typetypedans le paramètre suivant. |
| 3 | void 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 <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。 - Utilisation
va_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.