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 de va_list


Sujet :

C

  1. #1
    Membre confirmé Avatar de Joccy
    Profil pro
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Par défaut utilisation de va_list
    Bonjour,

    je souhaite développer une surcouche à printf, du type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void DISPLAY ( const s8* in_string, ... );
    Je pense qu'il faut utiliser les va_list et autres mais comment faire ?
    Merci de votre aide.

  2. #2
    Membre confirmé Avatar de Joccy
    Profil pro
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Par défaut
    Je suis allée prendre le corps de la fonction de printf sur <stdio.c>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    int printf (const char *format, ...)
          {
            va_list args;
            int retval;
     
            va_start (args, format);
            retval = vprintf (format, args);
            va_end (args);
     
            return retval;
          }
    Et j 'ai recopié ...
    Pas très "pro" comme code "perso", hein ?
    j'aurais voulu utilisé le "printf" mais bon ... ca marche comme ca, alors.
    Par contre si quelqu'un peut me dire comment faire (sans recopier le corps de printf) ca m'interesse ...

  3. #3
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par Joccy Voir le message
    Pas très "pro" comme code "perso", hein ?
    vfprintf() est la fonction de base de la famille printf(), donc tout va bien. Evidemment, tu n'as pas le droit d'utiliser printf() comme nom de fonction. Voir la reponse a cette FAQ.

  4. #4
    Membre confirmé Avatar de Joccy
    Profil pro
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Par défaut
    Et si je veux réutiliser ma fonction DISPLAY ??
    En fait, on me demande des mots clés (comme dans un scenario):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void mafonction_diplay(const s8* in_string, ... );
    doit appeler la sous fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void DISPLAY ( const s8* in_string, ... );
    ??

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Mars 2006
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Mars 2006
    Messages : 400
    Par défaut
    Dans ce cas, tu dois créer une variante de la fonction DISPLAY prenant en paramètre une va_list.

  6. #6
    Membre confirmé Avatar de Joccy
    Profil pro
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Par défaut
    C'est-à-dire ? merci de m'éclairer un peu ...

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 393
    Par défaut
    Généralement, on ne doit pas faire de fonction prenant uniquement des paramètres variables.

    La méthode conseillée, c'est faire une fonction qui prend une va_list en paramètre, et un wrapper qui prend des paramètres variables.

    Par exemple, dans la bibliothèque standard: Pour la plupart des implémentations, printf() est juste un wrapper qui appelle vprintf().
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre confirmé Avatar de Joccy
    Profil pro
    Inscrit en
    Août 2007
    Messages
    153
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 153
    Par défaut
    J'ai trouvé une exemple ici http://www.developpez.net/forums/sho...d.php?t=430409

    Super, merci à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. utilisation avancée va_list
    Par hwoarang dans le forum C++
    Réponses: 6
    Dernier message: 15/08/2008, 19h40
  2. Réponses: 8
    Dernier message: 29/03/2007, 11h16
  3. Utilisation de va_list
    Par Stochastic dans le forum C
    Réponses: 4
    Dernier message: 11/04/2006, 10h01
  4. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

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