Go Down

Topic: Fonction à nombre variable de paramètres passés par adresse. (Read 410 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