Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
763 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C] Fonctions avec n arguments

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Fonctions avec n arguments

n°126109
spark
Luc ?
Posté le 15-04-2002 à 15:57:30  profilanswer
 

Le problème est simple :
 
je voudrais faire un fonction comme printf avec n arguements
 
exemple:  
 
int a = 2;
int b = 3;
 
ma_fonction("test %d %d", a, b);
 
donc j'ai défini ma fonction comme ceci :
 
void ma_fonction(char*, ...)
{
 /* etc.. */
}
 
La question est : comment récupérer les valeurs dans le '...' de la définition de la fonction ?

mood
Publicité
Posté le 15-04-2002 à 15:57:30  profilanswer
 

n°126113
deathsharp
Posté le 15-04-2002 à 15:59:52  profilanswer
 

recherche voir autour de va_list, va_start et va_end


---------------
What butter and whiskey won't cure, there is no cure for.
n°126122
spark
Luc ?
Posté le 15-04-2002 à 16:08:06  profilanswer
 

ok, j'v voir ca
merci

n°126147
spark
Luc ?
Posté le 15-04-2002 à 16:29:56  profilanswer
 

Bon, bah ca compile mais ca fait n'imp
 
ma fonction c'est ca :
 
void MsgBox(HWND hWnd, char* Texte, char* Titre, ...)
{
 char buffer[256];
 
 // recuperation des arguments
 va_list arglist;
 va_start(arglist, Titre);
 
 // Formatage du message
 sprintf(buffer, Texte, arglist);
 
 // Affiche du message
 MessageBox(hWnd, buffer, Titre, MB_OK);
}
 
 
Seulement, quand je l'appelle avec MsgBox("Test %d %d",1,2) ca m'affiche :  
 
Test 6814944 6815144
 
ca ressemble pas vraiment à Test 1 2 .....
 
D'où vient le problème ?

n°126156
ixemul
Nan mais sans blague ! ⚡
Posté le 15-04-2002 à 16:34:10  profilanswer
 

ca ne marche pas exactement comme ca, voici un petit exemple calculant la moyenne de n variables passées en parametre, adapte le a tes besoin:
 
int moyenne( int first, ... )
{
   int count = 0, sum = 0, i = first;
   va_list marker;
 
   va_start( marker, first );     /* Initialise les variables argument. */
   while( i != -1 )
   {
      sum += i;
      count++;
      i = va_arg( marker, int);  /*<--- ici il faut passer le type  ;) */
   }
   va_end( marker );              /* Reset les variables argument ;)     */
   return( sum ? (sum / count) : 0 );
}

n°126158
deathsharp
Posté le 15-04-2002 à 16:35:50  profilanswer
 

utilise vsprintf
 
ta pas confondu Texte et Titre au ca ou dans le code? :heink:  
verifie voir


---------------
What butter and whiskey won't cure, there is no cure for.
n°126165
spark
Luc ?
Posté le 15-04-2002 à 16:40:59  profilanswer
 

merci bcp deathsharp grace a toi, ca marche !!
 
avec vsprintf ca marche nickel.
 
voilà le code juste pour ceux que ca intéresse :
 
void MsgBox(HWND hWnd, char* Texte, char* Titre, ... )
{
 char buffer[256];
 
 // Recuperation des arguments
 va_list arglist;
 va_start(arglist, Titre);
 
 // Formatage du message
 vsprintf(buffer, Texte, arglist);
 
 // Affichage du message
 MessageBox(hWnd, buffer, Titre, MB_OK);
}

n°126167
spark
Luc ?
Posté le 15-04-2002 à 16:41:43  profilanswer
 

c koi la différence entre sprintf et vsprintf ?
(oui, j'ai la flemme de chercher ;) )

n°126169
deathsharp
Posté le 15-04-2002 à 16:43:55  profilanswer
 

sprintf dernier arg c "..." et vsprintf c va_list si je me gourre po


---------------
What butter and whiskey won't cure, there is no cure for.
n°126171
spark
Luc ?
Posté le 15-04-2002 à 16:44:09  profilanswer
 

ok, vsprintf c'est spécialement pour les va_list/va_start
 
c'est cool, j'ai appris un truc intéressant aujourd'hui
 
merci encore

mood
Publicité
Posté le 15-04-2002 à 16:44:09  profilanswer
 

n°126173
deathsharp
Posté le 15-04-2002 à 16:45:26  profilanswer
 

:jap:


---------------
What butter and whiskey won't cure, there is no cure for.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C] Fonctions avec n arguments

 

Sujets relatifs
[C] Vecteurs et fonctionsJava/JNI - paramètres des fonctions C
[C#] Comment faire un fichier de fonctions externes ?[MFC] rajouter des fonctions non reliées à des messages dans un dialog
[C++ (Builder)] Fonctions mathématiques math.hPetite question sur un éventuel fonct des fonctions en //
[Java] Liste des fonctions et méthodesOpen GL : Fonctions 3D des cartes
FREE : Les fonctions basename() et substr() sont elles supportees ?[C/C++] Trigonométrie - Fonctions de perspectives
Plus de sujets relatifs à : [C] Fonctions avec n arguments


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR