Tutorial sur l'utilisation du type va_list

0/5 (5 avis)

Snippet vu 14 502 fois - Téléchargée 39 fois

Contenu du snippet

Ce code calcule une somme avec une fonction à nombre indéterminé d'arguments et grâce au type va_list.
Ce n'est sans doute pas la meilleur manière pour ce type de calcule (il y a mieux et plus simple), cependant le type va_list est utile dans bien d'autres cas.

Source / Exemple :


/* Tutorial sur l'utilisation du type va_list par Tanguy Moret*/
/* Code sous license GPL */

#include <iostream>
#include <stdarg.h> // va_list

double somme(int compte, ...);
static int compte=3;

int main()
{
double *nombres = new double[compte]; // On crée un tableau de 3 double
cout << "Calcule de la somme de " << compte << " nombres a l'aide du type va_list\n";
cin >> nombres[0] >> nombres[1] >> nombres[2];
cout << "\nSomme : " << somme(compte, nombres[0], nombres[1], nombres[2]);
delete[] nombres; // On détruit le tableau
}

double somme(int compte, ...) {
double resultat=0;
va_list varg; // Variable stockant la somme
va_start(varg, compte); // On initialise la variable
do {
resultat=resultat+va_arg(varg, double); // On fais la somme
compte--;
}while(compte!=0);
va_end(varg); // On détruit la variable
return resultat;
}
Ajouter un commentaire Commentaires
Messages postés
2
Date d'inscription
jeudi 28 août 2003
Statut
Membre
Dernière intervention
22 novembre 2006

Messages postés
15
Date d'inscription
lundi 4 août 2003
Statut
Membre
Dernière intervention
8 juin 2007

Oui, c'est nul. Il aurait fallu :
1) Ne pas utiliser de globale, même static.
2) Présenter mieux si ça se veut un tutorial... Surtout vu les explications fournies.
3) Ca répond pas à la question que je me posais avant d'attérir ici... Comment on fait s'il n'y a pas d'argument "constant" pour appeler va_start() ?
Messages postés
2
Date d'inscription
lundi 8 avril 2002
Statut
Membre
Dernière intervention
8 juin 2002

heu.....c koi l'intérêt de mettre la variable compte à l'état static alors ke compte est une variable globale......lol
ps: si tu veux absolument une variable static, tu dois mettre la déclaration de ta variable dans la fonction main à la limite....
Messages postés
28
Date d'inscription
jeudi 27 décembre 2001
Statut
Membre
Dernière intervention
5 août 2002

Oui mais si ca ne marche pas essaye avec <cstdarg>
Messages postés
30
Date d'inscription
lundi 4 mars 2002
Statut
Membre
Dernière intervention
20 décembre 2007

Est-ce que la librairie <stdarg.h> est en standard sur tous les compilateurs C++ ?

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.