Introduction
Note: Le code source complet pour l'exemple dans ce tutoriel peut être téléchargée à la fin du tutoriel. Note: Essayer de faire dans la PHP ? Check this out . Lorsque vous déclarez une fonction, le type et le nombre d'arguments sont généralement fixés à la compilation. Mais il est parfois nécessaire pour une fonction de pouvoir accepter un certain nombre d'arguments variable inconnue jusqu'à l'exécution.
Ce tutoriel va vous montrer comment créer une fonction C qui peut accepter un nombre variable d'arguments.
In a Nutshell
Si vous cherchez tout simplement un exemple pour aller au large de, je ne vais pas vous faire attendre. Voici un exemple d'une somme en fonction () qui additionne tous les entiers qui lui est passé et renvoie la somme:
#include <stdarg.h>
#include <stdio.h>
#include <stdarg.h>
int sum( int num, ... ) {
va_list args;
va_start(args, num);
int i, total = 0;
for( i = 0; i < num; ++i ) {
total += va_arg(args, int);
}
va_end(args);
return total;
}
int main() {
int total = sum(5, 1, 2, 3, 4, 5);
printf("Total: %d\n", total);
return 0;
}
- #include <stdarg.h>
- #include <stdio.h>
- #include <stdarg.h>
-
- int sum( int num, ... ) {
-
- va_list args;
- va_start(args, num);
-
- int i, total = 0;
- for( i = 0; i < num; ++i ) {
- total += va_arg(args, int);
- }
-
- va_end(args);
-
- return total;
- }
-
- int main() {
-
- int total = sum(5, 1, 2, 3, 4, 5);
- printf("Total: %d\n", total);
-
- return 0;
- }
How It Works
Regardons le code ligne par ligne:
La bibliothèque stdarg nous fournit les
va_list type de données, ainsi que les macros
va_start ,
va_arg , Et
va_end pour manipulation de la liste d'arguments.
int sum( int num, ... ) {
Pour déclarer la fonction, nous utilisons un point triple (...) Pour indiquer que la fonction accepte un nombre variable d'arguments. Le premier argument,
num , Est utilisé pour indiquer combien d'arguments ont été adoptés dans la fonction.
Si nous ne voulons pas utiliser l'argument d'abord comme une indication de longueur argument, nous aurions pu simplement utilisé le premier argument dans le cadre du numérotées pour se résumer, et a ensuite utilisé une sorte de numéro spécial (un négatif, peut-être) comme un indicateur que le dernier argument a été atteint.
va_list est un type de données utilisées par stdarg pour contenir la liste des arguments passés dans la fonction. Ici, nous déclarons une variable appelée
args .
va_start est une macro utilisé pour initialiser la liste des arguments pour que nous puissions commencer à lire les arguments de là.
int i, total = 0;
for( i = 0; i < num; ++i ) {
total += va_arg(args, int);
}
- int i, total = 0;
- for( i = 0; i < num; ++i ) {
- total += va_arg(args, int);
- }
Ici, on boucle sur la liste des arguments jusqu'au weve lire autant comme indiqué dans notre premier argument.
va_arg la macro est utilisé pour lire un argument sur la liste. Elle prend deux paramètres: le va_list objet nous avons créé,
args , Et un type de données. va_arg retournera l'argument suivant, car ce type.
va_end est une autre macro qui nettoie nos
args objet pour nous quand ont fini de l'utiliser.
Enfin, nous revenons, nous avons calculé le total dans la fonction.
Conclusion
Vous devriez maintenant savoir comment créer une fonction C qui accepte un nombre variable d'arguments à l'exécution. Cette technique est particulièrement utile pour créer des fonctions wrapper pour les fonctions qui acceptent déjà un certain nombre d'arguments variable, comme printf (). Cela est démontré dans mon tutoriel d'autres,
Rédaction d'un printf () personnalisée Wrapper fonction en C .
J'ai toujours les bienvenus questions ou des commentaires sur ce tutoriel. Il suffit de poster une réponse ou PM moi, im glad to help!
MultipleArgumentsC.zip
(646 Octets) Téléchargé 367 fois
Complete source code for the sum() example used in this tutorial.