[C] Fonctions avec n arguments

Fonctions avec n arguments [C] - C++ - Programmation

Marsh Posté le 15-04-2002 à 15:57:30    

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 ?

Reply

Marsh Posté le 15-04-2002 à 15:57:30   

Reply

Marsh Posté le 15-04-2002 à 15:59:52    

recherche voir autour de va_list, va_start et va_end


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

Marsh Posté le 15-04-2002 à 16:08:06    

ok, j'v voir ca
merci

Reply

Marsh Posté le 15-04-2002 à 16:29:56    

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 ?

Reply

Marsh Posté le 15-04-2002 à 16:34:10    

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 );
}

Reply

Marsh Posté le 15-04-2002 à 16:35:50    

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

Marsh Posté le 15-04-2002 à 16:40:59    

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);
}

Reply

Marsh Posté le 15-04-2002 à 16:41:43    

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

Reply

Marsh Posté le 15-04-2002 à 16:43:55    

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

Marsh Posté le 15-04-2002 à 16:44:09    

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

Reply

Marsh Posté le 15-04-2002 à 16:44:09   

Reply

Marsh Posté le 15-04-2002 à 16:45:26    

:jap:


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed