Go Down

Topic: Fonction à nombre variable de paramètres passés par adresse. (Read 446 times) previous topic - next topic

LibertyCareche

Dec 05, 2012, 06:42 pm Last Edit: Dec 06, 2012, 10:26 pm by LibertyCareche Reason: 1
Bonjour à tous,

Démarche inhabituelle s'il en est, j'apporte un code qui fonctionne et sauff erreur,... ne devrait pas.

J'avais besoin d'une fonction qui charge les variables de type "long" passées en paramètre avec les valeurs d'un tableau. Le nombre de paramètre est variable. Je n'ai rien trouvé de mieux que de passer l'adresse de ces variable.
Là où ça me gêne, c'est que j'ai lu qu'une fonction à nombre variable de paramètres ne peut pas être une fonction dont les paramètres sont passé par adresse, mais par valeur uniquement. Je pense que ma mémoire me joue des tour... !?

Voici la fonction :

Code: [Select]

// Fonction à nombre variable de paramètres passés par adresse.
void ChargementLong ( long *Variable, ... )
{
   int i=1;
   
   long *AdresVariable ; // Valeur du paramètre actuel

   va_list ap;
   va_start(ap, Variable);

   *Variable = atol ( MonTableau [i]);

   do {
     *AdresVariable = atol ( MonTableau [i] );
     AdresVariable = va_arg(ap, long*);
     
     i++;
   } while (AdresVariable != NULL );
   
   va_end(ap);
}


Voici l'appelant :
Code: [Select]

   ...
   ChargementLong ( &da, &db, &dc, &dd, NULL );
   ...


Deux questions :
1) Cela est-il... "normal" ?           Auquel cas soit ma mémoire me joue des tours soit l'info lue était au minimum périmée...
2) Quelqu'un aurait-il une solution pour avoir un appelant du genre :
ChargementLong ( da, db, dc, dd, NULL ); // sachant que le nombre de paramètre est variable.

     :)
Quidquid agis, prudenter agas, et respice finem !

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy