Pages: [1]   Go Down
Author Topic: Fonction à nombre variable de paramètres passés par adresse.  (Read 333 times)
0 Members and 1 Guest are viewing this topic.
Lormaison
Offline Offline
Newbie
*
Karma: 0
Posts: 48
Omnes vulnerant, ultima necat !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

      smiley
« Last Edit: December 06, 2012, 04:26:37 pm by LibertyCareche » Logged

Quidquid agis, prudenter agas, et respice finem !

Pages: [1]   Go Up
Jump to: