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 :

fonction avec un nombre non défini de paramètres


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2013
    Messages : 15
    Par défaut fonction avec un nombre non défini de paramètres
    salut les gurus du c

    j'aimerais bien pouvoir écrire une fonction qui pourrait accepter un nombre quelconque de paramètres, comme printf. Le détail qui fait que ça devient un problème c'est que j'aimerais aussi que cette fonction marche aussi si on ne lui en donne pas. J'ai vu que c'est pas possible d'utiliser
    Si ça peut aider ma fonction prendrait un nombre de 0 à plusieurs paramètres de type pointeur puis le dernier sera NULL sauf dans le cas où il y en a pas et si je peux m'en passer grace a vos conseils de gurus ce serait encore mieux

    merci

  2. #2
    Membre Expert
    Avatar de Metalman
    Homme Profil pro
    Enseignant-Chercheur
    Inscrit en
    Juin 2005
    Messages
    1 049
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Enseignant-Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 049
    Par défaut
    Pour "un ou plusieurs" je connais les va_list et va_args (ce que printf utilise).

    Mais pour aucun... euh... je suppose que la va_list sait le gérer, à vérifier ?
    --
    Metalman !

    Attendez 5 mins après mes posts... les EDIT vont vite avec moi...
    Les flags de la vie : gcc -W -Wall -Werror -ansi -pedantic mes_sources.c
    gcc -Wall -Wextra -Werror -std=c99 -pedantic mes_sources.c
    (ANSI retire quelques fonctions comme strdup...)
    L'outil de la vie : valgrind --show-reachable=yes --leak-check=full ./mon_programme
    Et s'assurer que la logique est bonne "aussi" !

    Ma page Developpez.net

  3. #3
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Bonjour,

    réponse courte : tu ne peux pas.
    Tu dois toujours avoir au moins un paramètre pour utiliser va_start. Donc la version sans aucun paramètre est impossible en utilisant stdarg.h.
    Ce que tu peux faire de plus proche est quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void fonction(type* param1, ...);
    Si param1 n'est pas NULL alors tu utilises les macros va_* pour accéder aux autres paramètres, en supposant qu'un paramètre NULL indique toujours la fin de la liste.

    réponse un peu plus longue: tu peux essayer de te débrouiller avec des macros. C'est souvent un peu plus compliqué, un peu plus casse gueule mais ça peut fonctionner.
    Avec C99 par exemple tu as les variadic macros, et avec gcc il y a une gestion des virgules comme séparateur de paramètres. Dans un premier temps lis la doc pour comprendre comment ça fonctionne.

    Donc après avoir ingéré la doc, on peut imaginer écrire l'implémentation de ta fonction avec comme premier paramètre un paramètre bidon, la liste effective des paramètres suit et se termine par NULL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void fonction_impl(char* dummy, ...)
    {
      va_list vl;
      char* param;
      va_start(vl,dummy);
      while ( (param=va_arg(vl, char*)) )
        puts(param);
      va_end(vl);
    }
    La macro est ensuite simple à construire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define fonction(...) {                                         \
                            fonction_impl("", ##__VA_ARGS__, NULL); \
                          } while(0)
    Un main pour tester ça pourrait-être :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int main()
    {
     
      fonction();
      fonction("1","2","3");
     
      return 0;
    }
    Comme je te l'ai dit, ce n'est pas une méthode que je te recommande ...

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

Discussions similaires

  1. Une méthode void avec un nombre non prédéfini de paramètres
    Par ROUGE87 dans le forum Général Java
    Réponses: 10
    Dernier message: 26/04/2011, 17h13
  2. Réponses: 3
    Dernier message: 05/09/2006, 00h47
  3. Réponses: 7
    Dernier message: 19/05/2006, 16h47
  4. Réponses: 6
    Dernier message: 10/08/2005, 11h36
  5. Une fonction avec des attributs non obligatoires
    Par YanK dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2002, 13h39

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