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 :

fct avec un nombre variable d'argument.


Sujet :

C

  1. #1
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut fct avec un nombre variable d'argument.
    bonjour, je souhaite utiliser une fonction acceptant un nombre variable d'argument, alors j'ai regardé un peu a droite et a gauche, j'ai trouvé va_list, va_args et va_end avec des tuto qui explique comment acceder a chacun (un par un) de ces arguments.. tres bien... mais j'ai un probleme :
    comment on accede a tous les arguments ?

    par exemple, je veux englober un fprintf() dans une fonction de debuggage,
    fprintf accepte un nombre variable d'argument, ma fonction debug() en acceptera aussi un nombre variable, mais comment je les passe a fprintf ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    /* exemple d'appel de ma fct de debuggage : */
    debug("x:%ld y:%ld",x,y);
    debug("ici");
     
    /*exemple de ce pourrait être cette fonction de debuggage : */
    void debug(int N,...)
    {
    #ifdef DEBUG_STDOUT
    fprintf( /* et là je fais quoi?...*/);
    #endif
    #ifdef DEBUG_FILE
    ...
    #endif
    }
    voilà.
    d'avance, merci.


    exemple de ce que j'ai trouvé : http://melem.developpez.com/langagec...age=libc#LVI-A

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par hpfx Voir le message
    par exemple, je veux englober un fprintf() dans une fonction de debuggage,
    fprintf accepte un nombre variable d'argument, ma fonction debug() en acceptera aussi un nombre variable, mais comment je les passe a fprintf ???
    La liste variable de paramètres se récupère avec va_list, va_start, etc.
    Une fois que la liste a été récupérée, il fut utiliser non pas fprintf() mais vfprintf() qui effectue le même traitement mais à partir d'une va_list et non d'une liste variable de paramètres.

  3. #3
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    ok merci.

    voici ce que ca donne (version simplifiée) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    void dbg(const char *chaine, ...)
    {
    	clock_t micro = clock();
    	va_list listearg;
    	fprintf(stderr, "[%06ld] ",micro);
    	va_start(listearg, fmt);
    	vfprintf(stderr, chaine, listearg);
    	va_end(listearg);
    	fprintf(stderr, "\r\n");
    }

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    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 381
    Points : 41 581
    Points
    41 581
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    void vdbg(const char *chaine, va_list listearg)
    {
    	clock_t micro = clock();
    	fprintf(stderr, "[%06ld] ",micro);
    	vfprintf(stderr, chaine, listearg);
    	fprintf(stderr, "\r\n");
    }
     
    void dbg(const char *chaine, ...)
    {
    	va_list listearg;
    	va_start(listearg, fmt);
    	vdbg(chaine, listearg);
    	va_end(listearg);
    }

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 04/03/2013, 11h16
  2. [Fortran 90] Nombre variable d'arguments
    Par Zoera dans le forum Fortran
    Réponses: 2
    Dernier message: 08/03/2005, 13h08
  3. Procédure avec un nombre variable d'arguments
    Par charly dans le forum Langage
    Réponses: 15
    Dernier message: 21/06/2002, 11h08

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