Partage
  • Partager sur Facebook
  • Partager sur Twitter

Appel d'une fonction

Premier pas C

Sujet résolu
    26 juin 2007 à 19:44:28

    Salut à tous,

    Un soucis dans mon petit code où j'appelle une fonction. Le problème vient visiblement de l'appel de cette fonction mais je ne comprends pas pourquoi.

    Quel est le problème?

    Merci d'avance.
    ^^

    L'erreur est sur l'appel de la fonction :

    Citation : Dev C++

    main.cpp:11: implicit declaration of function `int triple(...)'


    res = triple(nombre);


    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
      long nombre;
      long res;

      printf("Entrez un nombre, il sera multiplie par 3\n");
      scanf("%ld", &nombre);
      res = triple(nombre);
      printf("Resultat : %ld", res);
      system("PAUSE");
      return 0;
    }

    long triple(long nombre)
    {
     return nombre * 3;
    }
    • Partager sur Facebook
    • Partager sur Twitter
      26 juin 2007 à 19:54:52

      je sais pas où est ton problème parce que moi sous dev-C++ à part le fait que tu n'ait pas mis

      long triple(long nombre);

      dans tes directives de préprocesseur, tout marche bien. EDIT : aussi appellé prototype :euh:
      Est-ce le fait que tu ais mis
      return nombre * 3;

      essais peut-être
      long triple(long nombre)
      {
      nombre *=3;
       return nombre;
      }


      ensuite je suis pas expert mais je trouve rien à redire à ton code à part ces deux choses...
      • Partager sur Facebook
      • Partager sur Twitter
        26 juin 2007 à 20:09:44

        salut pogou
        j'ai trouvé ton problème :::

        dans ce programme, tu n'as pas mis de prototype de ta fonction au debut, DONC ta fonction triple doit se trouver AVANT ta fonction main!sinon, quand l'ordinateur lit ton programme, il tombe d'abord sur l'appel de fonction AVANT de la connaitre!!^^
        voila, essaye de de mettre ta fonction triple avant la fonction main, et tiens nous au courant stp ;)
        • Partager sur Facebook
        • Partager sur Twitter
          26 juin 2007 à 20:12:25

          Moi je trouve plusieurs choses à redire.
          int main(int argc, char *argv[])
          Tu ne te sers pas des arguments de la fonction main, donc préfère la forme
          int main(void)


          Citation

          main.cpp:


          main.cpp ?? Tu codes en C++, maintenant? Fais attention à bien enregistrer ton fichier en .c et à préciser à ton IDE que ton fichier/projet est en C et non en C++.

          Citation

          main.cpp:11: implicit declaration of function `int triple(...)'


          Quand on lit un peu l'anglais, on comprend déclaration de fonction implicite , c'est-à -dire que le compilateur arrive à la ligne 11 de ton programme, c'est-à -dire dans ton main, et voit un appel à une instruction 'triple'. Sauf que dans tout ce qu'il a lu avant, des lignes 1 à 10, il n'y avait rien de tel. Donc il ne sait pas ce que c'est que ce truc. La solution est d'écrire le prototype de ta fonction avant le début du main :
          long triple (long nombre);


          Attention au point-virgule à la fin du prototype ;)

          Pense à mettre ton sujet en résolu.
          • Partager sur Facebook
          • Partager sur Twitter
            26 juin 2007 à 20:21:19

            mais à la limite, le faite de mettre ou non les arguments dans le main, même si on ne les utilises pas, ce n'est pas dramatique...
            Par contre le truc du cpp, ça c'est dramatique o_O et l'oublie du prototype est plus que dramatique, voire même condanable de la peine de mort :colere2:
            • Partager sur Facebook
            • Partager sur Twitter
              26 juin 2007 à 20:37:51

              Non, c'est vrai, ce n'est pas dramatique. Rien n'est dramatique, en programmation. Mais tant qu'à apprendre quelquechose, autant l'apprendre bien et ne pas se contenter d'à-peu-près.
              Et la peine de mort, t'es gentil, mais tu la gardes pour toi, et tu te rappelles qu'un jour aussi tu as découvert les fonctions, et que tu n'as pas la science infuse! :colere2:
              • Partager sur Facebook
              • Partager sur Twitter
                26 juin 2007 à 21:28:52

                Ouai! Méchant Bbar! T'es qu'une espèce de monstre qui se complet dans un monde de cruauté! Tu mériterais la peine de mort!
                :diable:

                Ceci-dit, merci. :-°
                • Partager sur Facebook
                • Partager sur Twitter
                  26 juin 2007 à 22:18:45

                  bon bhé on se contente de la torture :-° (ce que j'ai dit il fallait le prendre au second degrès (voir même le troisième si possible) comme l'a compris pogou. Et au passage, je n'ai jamais fais cette erreur là... mais j'ai fait 20 fois pire (j'ai tellement honte aujourd'hui que je prèfère ne pas en parler :euh::euh::honte::honte::honte: )
                  • Partager sur Facebook
                  • Partager sur Twitter
                    26 juin 2007 à 23:38:36

                    Au fait si j'ai bien compris,
                    soit je mets toutes mes fonctions avant le main,
                    soit je met un prototype pour lui dire : "hep! y'a une fonction là, t'as vu?".

                    ou bien je mets un prototype à chaque fois?

                    Merci.
                    ^^
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 juin 2007 à 23:49:51

                      salut,
                      non te pas obliger de mettre un prototype si ta fonction et avan le main
                      • Partager sur Facebook
                      • Partager sur Twitter
                        26 juin 2007 à 23:53:30

                        Citation : Bbar

                        je sais pas où est ton problème parce que moi sous dev-C++ à part le fait que tu n'ait pas mis

                        long triple(long nombre);


                        dans tes directives de préprocesseur, tout marche bien. EDIT : aussi appellé prototype :euh:
                        Est-ce le fait que tu ais mis

                        return nombre * 3;


                        essais peut-être

                        long triple(long nombre)
                        {
                        nombre *=3;
                         return nombre;
                        }



                        ensuite je suis pas expert mais je trouve rien à redire à ton code à part ces deux choses...



                        Aïe ... Les prototypes c'est avant le main (ou dans un fichier.h à l'occasion) mais en aucun cas "dans" les directives de préprocesseur qui se limitent aux #include #define et autres. Sinon return nombre * 3 est correct ;)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 juin 2007 à 0:01:05

                          A propos des fichiers .h, dans le cours il est uniquement expliqué ce qu'est un prototype, à quoi ça sert et comment les mettre en place. Il y une vague explication sur l'utilité des fichiers .h mais qui dérive sur : "pourquoi c'est cool les prototypes".

                          Citation : Tuto C

                          La raison est en fait assez simple. Quand dans votre code vous faites appel à une fonction, votre ordinateur doit déjà la connaître, savoir combien de paramètres elle prend etc. C'est à ça que sert un prototype : c'est le mode d'emploi de la fonction pour l'ordinateur.
                          Tout est une question d'ordre : si vous mettez vos prototypes dans des .h (headers) inclus en haut des fichiers .c, votre ordinateur connaîtra le mode d'emploi de toutes vos fonctions dès le début de la lecture du fichier.

                          En faisant cela, vous n'aurez ainsi pas à vous soucier de l'ordre dans lesquelles les fonctions se trouvent dans vos fichiers .c
                          Si vous faites un petit programme maintenant contenant 2-3 fonctions, vous vous rendrez compte que les prototypes semblent facultatifs (ça marche sans). Mais ça ne durera pas longtemps ! Dès que vous aurez un peu plus de fonctions, si vous ne mettez pas vos prototypes de fonctions dans des .h la compilation plantera lamentablement


                          Ce que je voudrai bien savoir, c'est pourquoi ne pas mettre les prototypes en haut du fichier concernés plutôt que de créer un fichier .h?
                          A vue de nez je dirai que bon, ça n'a d'utilité réelle que dans les applis de taille moyenne.
                          Qu'avez-vous à me dire la dessus?

                          Merci.
                          ^^
                          • Partager sur Facebook
                          • Partager sur Twitter
                            27 juin 2007 à 0:39:11

                            Ouais bah t'as tout compris si c'est pour faire un plus ou moins pas besoins de headers mais lorsque tu feras des projets un minimum plus ambitieux ton code sera plus lisible paceque 10.000 lignes de code dans un même fichier ....... Et bah ça commence à faire beaucoup ^^ Voilà en espérant avoir répondu à ta question ;)

                            EDIT :Et puis il se peut que tu doive inclure ce header dans plusieurs fichiers donc un simple #include <fichier.h> suffira au lieu de tout retaper ;)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Appel d'une fonction

                            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                            • Editeur
                            • Markdown