Fonction à nombre variable de paramètres passés par adresse.

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 :

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

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

:slight_smile: