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 :

Appel de fonction à nombre inconnu d'arguments !


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 40
    Par défaut Appel de fonction à nombre inconnu d'arguments !
    Bonjour à tous.

    Dans le cadre d'un projet systeme, je suis confronté à un petit souci...

    Je dois en effet implanter des plugins qui permettront de faire des opérations sur une pile. L'utilisateur entrera donc ses commandes: exemple: "empiler a". Le programme deva donc ajouter l'élément a en sommet de pile.
    Mais évidemment, selon le plugin, le nombre d'arguments varie. Alors je ne vois pas trop comment appeler mon plugin (au sein de la boucle de saisie de commandes), étant donné que le nombre d'argument n'est pas forcément le meme pour tous les plugins. Je ne vois pas non plus cmt gérer les erreurs du type: un int a été envoyé en argument à la place d'un .. char par exemple!

    si quelqu'un pouvait éclairer ma lanterne ... reconnaissance infinie assurée!

    merci d'avance,
    L.

  2. #2
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    bah, pourquoi pas passer une structure avec un enum qui donneras le type de donnée et un pointeur (void *) vers une structure representant l'element?
    apres dans tes fonctions ... tu te debrouille avec ton enum pour savoir quoi faire de ton pointeur.

  3. #3
    Membre Expert
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Par défaut
    Salut

    Tu peux peut être définir un nombre max d'arguments et les "commandes" auront un certain nombre d'arguments valorisés.
    Pour le type des arguments, si c'est saisi par l'utilisateur, on peut etre sûr du fait que ce sont toujours des chaines (qui representent peut être des entiers ou des caracteres uniques ou des flottants, mais qui sont quand meme des chaines à la base)

  4. #4
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    si c'est des chaines de caractere, tu peux "lineariser" (je suis pas sur du terme) les arguments : fonction(int argc,char *argv[]) (ca devrais rappeler quelque chose )

    dans les solutions "usines a gaz" t'as aussi la possibilité d'utiliser les va_args.

  5. #5
    Membre éclairé Avatar de nicolas66
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    326
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 326
    Par défaut
    Pour ma part, j'ai déjà utilisé les 'va_args' dans le cadre d'un TP et je peux dire que ca fonctionne bien. Mais c'est un peu lourd à utiliser ...


    Nico.

  6. #6
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    Citation Envoyé par Dark_Ebola
    si c'est des chaines de caractere, tu peux "lineariser" (je suis pas sur du terme) les arguments : fonction(int argc,char *argv[]) (ca devrais rappeler quelque chose )

    dans les solutions "usines a gaz" t'as aussi la possibilité d'utiliser les va_args.
    Sinon il peut aussi passer des listes, comme c'est d'usage dans les langages fonctionnels . C'est plus joli.

  7. #7
    Invité
    Invité(e)
    Par défaut
    il existe des fonctions elliptiques (je crois que c'est le nom) où tu peux passer un nombre de paramètres variables et le dernier doit être NULL, en tout cas c'est conseillé pour détecter la fin de la liste des paramètres.
    le soucis de cette méthode est qu'il faut connaitre à l'avance le type des paramètres, la solution est de passer un paramètre par paire : son type et la donnée.

    par exemple ca donnerait un appel de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fonction ( INT_REF, myIntValue,
               FLOAT_REF, myFloatValue,
               NULL);
    je vais voir si je retrouve mon document a ce propos

  8. #8
    Membre Expert Avatar de gnto
    Homme Profil pro
    Ingénieur système logiciel
    Inscrit en
    Janvier 2006
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur système logiciel
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2006
    Messages : 923
    Par défaut
    Citation Envoyé par tomazy
    il existe des fonctions elliptiques (je crois que c'est le nom) où tu peux passer un nombre de paramètres variables et le dernier doit être NULL, en tout cas c'est conseillé pour détecter la fin de la liste des paramètres.
    le soucis de cette méthode est qu'il faut connaitre à l'avance le type des paramètres, la solution est de passer un paramètre par paire : son type et la donnée.

    par exemple ca donnerait un appel de cette manière

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    fonction ( INT_REF, myIntValue,
               FLOAT_REF, myFloatValue,
               NULL);
    je vais voir si je retrouve mon document a ce propos
    On ma appris que c'étais des fonctions variadiques bref les termes ca change d'une école à l'autre.

    Je pense que tu parle de va_arg,va_start,va_end cité ci-dessus

Discussions similaires

  1. extraction d'un nombre inconnu d'arguments
    Par phicarre dans le forum Ruby
    Réponses: 8
    Dernier message: 21/03/2014, 23h45
  2. Appel de fonctions/arguments
    Par GO dans le forum C++
    Réponses: 14
    Dernier message: 25/09/2006, 22h46
  3. Nombre limité d'arguments sur fonction
    Par richard038 dans le forum Langage
    Réponses: 5
    Dernier message: 16/05/2006, 22h35
  4. Comment appeller une fonction dynamiquement, à partir d'un argument
    Par Invité dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 23/04/2006, 16h47
  5. Réponses: 4
    Dernier message: 31/10/2005, 17h48

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