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 régulier 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
    Points : 81
    Points
    81
    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 régulier 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
    Points : 81
    Points
    81
    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 expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    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 régulier 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
    Points : 81
    Points
    81
    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 confirmé
    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
    Points : 562
    Points
    562
    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 régulier 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
    Points : 81
    Points
    81
    Par défaut
    C'est-à-dire ? merci de m'éclairer un peu ...

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 575
    Points
    41 575
    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().

  8. #8
    Membre régulier 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
    Points : 81
    Points
    81
    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