Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

TUTORIAL SUR L'UTILISATION DU TYPE VA_LIST


Information sur la source

Catégorie :Tutoriaux Niveau : Initié Date de création : 05/06/2002 Date de mise à jour : 05/06/2002 08:08:01 Vu : 6 896

Note :
3 / 10 - par 2 personnes
3,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

Description

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

  • /* 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;
  • }
/* 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;
}

Commentaires et avis

signaler à un administrateur
Commentaire de JosueClement le 05/06/2002 08:26:38

Est-ce que la librairie &lt;stdarg.h&gt; est en standard sur tous les compilateurs C++ ?

signaler à un administrateur
Commentaire de guguy le 05/06/2002 13:36:37

Oui mais si ca ne marche pas essaye avec &lt;cstdarg&gt;

signaler à un administrateur
Commentaire de VietCoder le 08/06/2002 15:26:22

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....

signaler à un administrateur
Commentaire de remram44 le 16/06/2006 20:57:00

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() ?

signaler à un administrateur
Commentaire de akboy le 07/07/2006 18:06:57

En plus, c'est un code pompé de la MSDN:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclib/html/_crt_va_arg.2c_.va_end.2c_.va_start.asp

(cf en bas de la page)

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.