IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

utilisation avancée va_list


Sujet :

C++

  1. #1
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut utilisation avancée va_list
    Bonjour à tous,

    J'ai une fonction qui utilise une va_list dans l'esprit printf.
    Mais j'aimerais, lorsque cette fonction est appellée, sauvegarder les parametres dans des variables statiques afin de les utiliser plus tard.

    Pour illustrer ce que je veux faire (ce code n'est pas valide mais c'est juste pour comprendre) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static va_list my_list;
    void save_list(char *str, ...)
    {
       va_start(my_list, str);
       va_end(my_list);
    }
     
    void rempli_buf(char *str)
    {
      VSNPRINTF(str, 100, my_list);
    }
    Mon probleme, c'est que va_start et va_end doivent etre appelés dans la meme fonction. Meme va_copy ne semble pas convenir.

    Est ce que quelqu'un a une idée de comment faire ca ?

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    static va_list my_list;
    C'est pas possible. Explique exactement ce que tu veux faire (la finalité, sans parler des moyens) et on essaiera de trouver une solution correcte à ce problème si il est bien posé.
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    Merci pour la réponse (meme si elle est négative T_T). Je suis sous linux et je fais du C/C++

    En fait, j'ai une librairie partagée qui throw une classe Erreur qui est également utilisée dans le programme principal. J'ai donc été obligé d'inclure la classe Erreur dans le programme principal et la lib partagée (je comprend pas pourquoi mais la lib partagée ne s'execute pas sinon).
    Le probleme, c'est que la classe Erreur est donc dupliquée et comme elle contient des variables statiques, les Erreurs ne marchent pas quand elles arrivent dans la bibliotheque partagée (les variables statiques sont non initialisées).

    Comme c'est la classe Erreur donc le contructeur peut prendre un nombre variable de parametres, j'avais pensé sortir Erreur de la librairie partagée et de lancer une sous-classe qui sauvegarderait les parametres quelque part et qu'il serait possible de remettre sous en forme dans une classe Erreur en revenant dans le programme principal.

    Comme je ne suis pas sur d'avoir été très clair, je vais essayer de résumer mes 2 problemes :
    1 - Lorsque j'utilise une meme classe dans mon programme principal et ma bibliotheque partagée, je suis obligé de la dupliquer (alors qu'a mes yeux, seul le header est necessaire, le reste pourrait se faire au link).
    2 - Je n'arrive pas a mettre de coté une liste de parametres pour pouvoir les reutiliser plus tard.

    Merci pour l'aide

  4. #4
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Merci pour la réponse (meme si elle est négative T_T). Je suis sous linux et je fais du C/C++
    Il n'y a pas de C/C++. C et C++ sont des langages différents.

    En fait, j'ai une librairie partagée qui throw une classe Erreur
    Pas de classes en C et C++ gère déjà les exceptions. Je déplace en section C++ ?
    Pas de Wi-Fi à la maison : CPL

  5. #5
    Membre chevronné
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Points : 1 984
    Points
    1 984
    Par défaut
    ok pour le deplacement. Merci

  6. #6
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Bonjour à tous,

    Mon probleme, c'est que va_start et va_end doivent etre appelés dans la meme fonction. Meme va_copy ne semble pas convenir.

    Est ce que quelqu'un a une idée de comment faire ca ?

    Merci
    En fait... c'est même pire... dans certaines implémentations, va_list va devoir être crée sur la pile (donc dans la fonction)...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    MaFonction(char* str, ...)
    {
       va_list   vlist;
       va_start(vlist,str);
       MonAutreFonction(str,vlist);
       va_end(vlist);
    }
     
    MonAutreFonction(char* str, va_list vlist)
    {
        ....
    }
    Ce code marche en tout cas...
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  7. #7
    Expert éminent

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Points : 6 911
    Points
    6 911
    Par défaut
    Citation Envoyé par hwoarang Voir le message
    Comme je ne suis pas sur d'avoir été très clair, je vais essayer de résumer mes 2 problemes :
    1 - Lorsque j'utilise une meme classe dans mon programme principal et ma bibliotheque partagée, je suis obligé de la dupliquer (alors qu'a mes yeux, seul le header est necessaire, le reste pourrait se faire au link).
    Je ne vois même pas à quel problème tu fais allusion.

    2 - Je n'arrive pas a mettre de coté une liste de parametres pour pouvoir les reutiliser plus tard.
    Impossible. En passant, l'utilisation des fonctions à nombre variable d'arguments est généralement pas une bonne solution en C++.
    Les MP ne sont pas là pour les questions techniques, les forums sont là pour ça.

Discussions similaires

  1. Utilisation avancée de SCHTASKS
    Par noirot dans le forum Windows
    Réponses: 1
    Dernier message: 04/04/2007, 09h31
  2. utilisation avancée de tchart
    Par fofmata dans le forum Delphi
    Réponses: 2
    Dernier message: 31/03/2007, 09h13
  3. Réponses: 8
    Dernier message: 29/03/2007, 11h16
  4. Utilisation avancée d'un champ numéroAuto
    Par mbzhackers dans le forum Access
    Réponses: 7
    Dernier message: 09/07/2006, 23h28
  5. Utilisation de va_list
    Par Stochastic dans le forum C
    Réponses: 4
    Dernier message: 11/04/2006, 10h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo