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 :

comment declarer des fonctions se définissant mutuellement


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut comment declarer des fonctions se définissant mutuellement
    Bonjour à tous.. je suis nouveau et j'aimerais savoir comment declarer (en C bien sur ) des fonctions qui se définissent l'une l'autre comme dans cet exemple :

    void f()
    {
    .
    .
    .
    g()
    .
    .
    }

    mais

    void g()
    {
    .
    .
    .
    f()
    .
    .
    }
    Problème: si je définis f avant g ERREUR: g should have a prototype!
    et vice versa si je définis g avant f
    A L'AIDE

  2. #2
    Membre éprouvé
    Inscrit en
    Novembre 2002
    Messages
    120
    Détails du profil
    Informations forums :
    Inscription : Novembre 2002
    Messages : 120
    Par défaut
    Pourquoi ne pourrais-tu pas faire un truc du genre (c'est pour l'exemple car ça nous donne bien entendu une boucle infinie):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    unsigned f(unsigned x);
    unsigned g(unsigned x);
     
    unsigned f(unsigned x) { return g(x); }
    unsigned g(unsigned x) { return f(x); }

  3. #3
    Membre chevronné
    Avatar de bigquick
    Profil pro
    Inscrit en
    Août 2002
    Messages
    356
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 356
    Par défaut
    Si tu veux avoir des fonctions qui s'appellent l'une l'autre, il va falloir déclarer leur prototype en amont (pour que le compilateur connaisse leur type de retour et leurs parametres) au moment où il tombe dessus. Donc par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    /* déclaration des prototypes */
    void f(char c);
    int g();
     
     
    /* définitions de tes fonctions, avec leurs corps */
     
    void f(char c)
    {
        int ret = g();
    }
     
    int g()
    {
       f ('a');
    }
    Enfin si tu n'as aucune condition d'arrêt, tes deux fonctions vont s'appeler indéfiniement

    Dans le même ordre d'idées, si ton projet est assez gros, tu peux le découper en différents fichiers (selon les principaux modules). Regarde par ici pour un début d'explication : http://www.developpez.net/forums/vie...otype+fichiers

    edit: grillé

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: comment declarer des fonctions se définissant mutuelleme
    Citation Envoyé par jindono
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void f(void)
    {
       g();
    }
     
    void g(void)
    {
       f();
    }
    C'est de la récursion. C'est voulu ? Il y a une condition d'arrêt ? Tu es nouveau et tu te lances dans de la programmation complexe, c'est normal ?
    Problème: si je définis f avant g ERREUR: g should have a prototype!
    et vice versa si je définis g avant f
    Fait ce qui est écrit : Fourni un protoype !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    void g(void);
     
    void f(void)
    {
       g();
    }
    ...

  5. #5
    Membre averti
    Inscrit en
    Avril 2006
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 11
    Par défaut
    merci à tous j'ai fait :
    #include...

    // declaration des prototypes
    void f();
    void g();
    .
    .
    .
    main()
    {
    .
    .
    .
    }

    //definition de f
    void f()
    {
    .
    g()
    .
    }

    // definition de g
    void g()
    {
    .
    .
    f()
    .
    .
    }

    PS: quand j'ai dit que j'etais nouveau, je voulais dire nouveau sur ce forum

    Encore un grand merci à tous....

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 22/05/2006, 13h54
  2. Réponses: 6
    Dernier message: 30/09/2005, 00h53
  3. Réponses: 8
    Dernier message: 29/11/2004, 16h28
  4. Réponses: 1
    Dernier message: 05/11/2004, 17h15
  5. Réponses: 14
    Dernier message: 15/01/2004, 01h15

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