Macro de la bibliothèque C -va_start()
Bibliothèque standard C - <stdarg.h>
Description
va_startLes macros constituent la bibliothèque standard du C.<stdarg.h>Une macro dans un fichier d'en-tête, utilisée pour initialiser uneva_listvariable afin que le nombre d'arguments variadiques soit accessible dans une fonction variadique.
Macro de bibliothèque Cvoid va_start(va_list ap, last_arg)Initialiser la variableap, quiva_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.
Cette macro doit être utilisée dansva_argetva_enda été appelée auparavant.
Déclaration
Ci-dessous se trouve la déclaration de la macro va_start().
void va_start(va_list ap, last);
Paramètre
va_list ap: Il s'agit d'un type utilisé pour accéder aux arguments variadiques. Il sera initialisé après l'appel de la macro et utilisé lors desva_argrécupérations suivantes d'arguments dans un appel.last: C'est le dernier paramètre fixe connu avant la liste d'arguments variadiques. Autrement dit, le dernier paramètre de la liste des paramètres de la fonction avant le début des arguments variadiques.
Valeur de retour
N/D
Étapes d'utilisation
- Pour définir une fonction variadique, vous devez avoir au moins un paramètre fixe (c'est-à-dire des
lastparamètres). - Déclarer un
va_listUne variable utilisée pour stocker des informations sur la liste d'arguments variadiques. - Utilisation
va_startInitialisation de la macrova_listvariable. - Utilisation
va_argLa macro récupère chaque argument variable à tour de rôle. - Utilisation
va_endNettoyage de macrova_listvariable.
Exemple
L'exemple suivant montre l'utilisation de la macro va_start().
Exemple
#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é pour stocker des informations sur la liste d'arguments variadiques.va_start(args, count);: initialiserargspour accéder depuiscountArguments variables qui commencent ensuite.total += va_arg(args, int);: Utiliserva_argLa macro récupère l'argument variadique suivant, en supposant qu'ils sont tousintde type, et l'accumuler danstotaldans la variable.va_end(args);: nettoyerargs, afin de libérer des ressources et d'éviter un comportement indéfini.
Notes
va_startdoit avecva_list、va_argetva_endUtilisés ensemble.- Appel
va_startAprès, il faut appelerva_endpour terminer le traitement des arguments variables. - Lors de l'appel
va_startAvant, vous devez vous assurer que la liste des paramètres de la fonction comporte au moins un paramètre fixe. lastLe paramètre est le dernier paramètre fixe avant la liste d'arguments variadiques, utilisé pour déterminer où commencer le traitement des arguments variadiques.