Maîtriser les arguments variables en C : Guide pratique
Il arrive parfois qu'on veuille une fonction capable d'accepter un nombre variable d'arguments (paramètres) au lieu d'un nombre prédéfini. Le langage C offre une solution pour cette situation : vous pouvez définir une fonction acceptant un nombre variable de paramètres selon vos besoins. L'exemple suivant montre la définition d'une telle fonction :
int func(int, ... ) {
...
}
int main() {
func(1, 2, 3);
func(1, 2, 3, 4);
}
Il faut noter que la fonction func() a son dernier argument sous forme de points de suspension (trois points ...) et que l'argument juste avant les points de suspension est toujours un int qui représentera le nombre total d'arguments variables passés. Pour utiliser cette fonctionnalité, vous devez utiliser le fichier d'en-tête stdarg.h qui fournit les fonctions et macros pour implémenter les arguments variables, et suivre les étapes suivantes :
Définir une fonction avec son dernier paramètre comme points de suspension et celui juste avant comme un int représentant le nombre d'arguments.
Créer une variable de type va_list dans la définition de la fonction. Ce type est défini dans
stdarg.h.Utiliser le paramètre int et la macro va_start pour initialiser la variable va_list à une liste d'arguments. La macro
va_startest définie dansstdarg.h.Utiliser la macro va_arg et la variable va_list pour accéder à chaque élément de la liste d'arguments.
Utiliser la macro va_end pour nettoyer la mémoire allouée à la variable va_list.
Suivons ces étapes et écrivons une fonction simple qui prend un nombre variable de paramètres et renvoie leur moyenne :
Démonstration en direct#include <stdio.h>
#include <stdarg.h>
double moyenne(int nb, ...) {
va_list liste_args;
double somme = 0.0;
int i;
/* initialiser liste_args pour nb arguments */
va_start(liste_args, nb);
/* accéder à tous les arguments assignés à liste_args */
for (i = 0; i < nb; i++) {
somme += va_arg(liste_args, int);
}
/* nettoyer la mémoire réservée pour liste_args */
va_end(liste_args);
return somme / nb;
}
int main() {
printf("Moyenne de 2, 3, 4, 5 = %f\n", moyenne(4, 2, 3, 4, 5));
printf("Moyenne de 5, 10, 15 = %f\n", moyenne(3, 5, 10, 15));
}
Lorsque le code ci-dessus est compilé et exécuté, il produit le résultat suivant. Notez que la fonction moyenne() a été appelée deux fois et que chaque fois le premier argument représente le nombre total d'arguments variables passés. Seuls les points de suspension sont utilisés pour passer un nombre variable d'arguments.
Moyenne de 2, 3, 4, 5 = 3.500000 Moyenne de 5, 10, 15 = 10.000000
Langue C
- Quatre modèles éprouvés pour les fonctions définies par l'utilisateur en C
- Comprendre les classes de stockage en C : Portée, durée de vie et performance
- Comment passer des tableaux 1D et 2D aux fonctions en C – Guide pratique
- Maîtriser les arguments de fonctions Python : Positionnels, nommés et paramètres par défaut
- Variables et types de données en C++ : Guide expert sur int, double, char, string, bool
- Variables C, types de données et constantes – Guide pratique
- Comprendre les affectations Verilog : Types, Syntaxe et Bonnes Pratiques
- Comprendre les variables en C : Types, règles de nommage et gestion mémoire
- Maîtriser les fonctions en C : Structure, déclaration et bonnes pratiques