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 :

une fonction pouvant recevoir 2 types differents


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut une fonction pouvant recevoir 2 types differents
    Voila, voila,
    Je voudrais passer a une fonction f la chose suivante :
    un truc du style
    void f(int ou char *)

    Autrement dit avoir la possibilité de faire
    ...
    int i=2;
    f(2);
    ...
    char * ch;
    ...
    f(ch);

    Sachant que je sais dans f que je recevrais un entier ou une chaine
    Est ce possible ?
    Et comment declarer f ?
    Merci

  2. #2
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 594
    Points
    594
    Par défaut
    Tu peux utiliser un "union".
    Tu sais ce que sais ?
    http://c.developpez.com/cours/bernar...gne/node93.php

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    Sachant que je sais dans f que je recevrais un entier ou une chaine
    Je dirais plutôt un entier ou un pointeur sur char (ou pointeur sur le premier caractere d'une chaine).

    Je ne sais pas comment tu veux le traiter dans ta fonction mais c'est plutôt dangereux.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut comme le sujet vous interesse
    imaginez.
    j'ai un champ ecran
    des caracteristiques.
    soit reel , soit chaine
    je veux pouvoir avoir une fonction du type
    mets_dans_chant( toto, valeur);

    Valeur pouvant etre chaine ou reel...
    Par contre , il est clair que la fonction mets_dans_chant a les carc du champ toto
    .. elle saura si elle doit traiter un reel ou une chaine..
    Mais est ce que le compilateur me le permet ?
    L'idee 'union' ne me parait pas bete ... je l'ai jamais utilisee , je vais voir

    Mais mon but est qd meme que le programmeur puisse mettre du code

    mets_dans_chant( toto, ma_chaine);
    ..
    mets_dans_chant( titi, mon_reel);

    Sans avoir a formater au sens chaine avant.
    Si union m'impose un type specifique , et donc m'impose une ligne supplementaire , je ne l'utiliserai pas.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut ...
    A la limite passer par un pointeur void ..
    Ca m'ennuie un peu car le programmeur devra utiliser &val pour le reel ..et val pour la chaine..
    mais bon, je verrai

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut ... j'essaie union
    Je fais des test avec union...

    Voici le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    union chp
       {
       double f;
       char * ch;
       } un_champ;
     
    void coucou(chp toto)
    {
    double q;
    q=toto.f;.....
    }
    ... le code suivant compile !!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    double q;
    chp q1;
    q=1;
    q1.f=q;
    .... mais helas cette ligne je ne la veux pas.

    ...
    Je voulais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    double q;
    q=1;
    coucou(q);
    Tant pis pour union ... je jouerai avec void *...

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 79
    Points : 77
    Points
    77
    Par défaut on ferme...
    Je suis passe par des pointeurs muets (void)
    Ca marche impec.

    Merci, vos réponses étaient pas inutiles.

    Sujet clos.

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

Discussions similaires

  1. Créer une fonction pouvant renvoyer 2 types différents
    Par Simara1170 dans le forum Langage
    Réponses: 4
    Dernier message: 16/06/2014, 14h42
  2. Réponses: 14
    Dernier message: 18/07/2011, 21h00
  3. Réponses: 9
    Dernier message: 02/03/2005, 22h46

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