Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Cours] La programmation modulaire

Impossible de séparer mes fonctions dans plusieurs fichiers

Sujet résolu
    26 septembre 2007 à 19:50:34

    Bonjour,

    Je n'arrive pas à mettre mes fonctions dans plusieurs fichier même après je ne sais combien de relectures du cours de mateo.

    Voici mes fichiers avec une fonction basique:

    main.c:
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include "fonction.h"
    4. int main()
    5. {
    6.         bonjour ();
    7.         return 0;
    8. }


    fonction.c:
    1. void bonjour ()
    2. {
    3.     printf("Hello world!\n");
    4. }


    fonction.h:
    1. void bonjour ();



    Quand je compile j'ai une erreur:
    undefined reference to `bonjour'

    Voila. J'aimerais bien savoir ce qui cloche.

    Merci beaucoup.

    Note: Je suis sous Code::Block
    • Partager sur Facebook
    • Partager sur Twitter
      26 septembre 2007 à 19:59:27

      est ce que le fichier fonction.c fais bien parti du projet ?
      • Partager sur Facebook
      • Partager sur Twitter
        26 septembre 2007 à 20:00:46

        Salut,

        Verifie que tu n'a QUE ces 3 fichiers là dans ton projet (et qu'ils y sont :p )
        Verifie aussi si tu n'a pas defini 2x la fonction bonjour.

        EDIT: Grillé ;)
        • Partager sur Facebook
        • Partager sur Twitter
          26 septembre 2007 à 20:01:46

          Dans fonction.c tu dois inclure fonction.h
          • Partager sur Facebook
          • Partager sur Twitter
            26 septembre 2007 à 20:02:55

            Oui enfin normalement.

            Sous code::block j'ai:

            Sources:
            -fonction.c
            -main.c
            En-têtes:
            -fonction.h (mais il est écrit en gris clair)


            J'ai essayé d'inclure le fichier "fonction.h" dans fonction.c mais rien n'a changé
            J'ai essayé d'inclure les autres fichiers (comme dans main.c) et là non plus aucun changement.

            Merci de vos réponces.
            • Partager sur Facebook
            • Partager sur Twitter
              26 septembre 2007 à 20:03:56

              Citation : Caribou87

              Dans fonction.c tu dois inclure fonction.h



              non pas obligatoirement

              si il y a juste le prototype il semble que tu n'es pas obliger
              • Partager sur Facebook
              • Partager sur Twitter
                26 septembre 2007 à 20:24:49

                Chez moi ça fonctionne... Envoi un screenshot de ton "plan de travail".
                • Partager sur Facebook
                • Partager sur Twitter
                  26 septembre 2007 à 20:56:43

                  Citation : akhenathon

                  Citation : Caribou87

                  Dans fonction.c tu dois inclure fonction.h



                  non pas obligatoirement

                  si il y a juste le prototype il semble que tu n'es pas obliger


                  On peut techniquement s'en passer, mais il est fortement recommandé qu'il soit inclus (c'est d'ailleurs vérifié par gcc en mode 'parano').

                  -Wmissing-prototypes
                  -Wmissing-declarations

                  Ca évite des erreurs d'incohérence entre les prototypes séparés et les définitions des fonctions.

                  Plus on fourni au compilateur le moyen de détecter les erreurs, plus on augmente nos chances d'écrire du code correct. Sur des projets de plusieurs millions de lignes, c'est indispensable...

                  Ne jamais confondre ce qui est 'possible' et ce qui est 'souhaitable'.

                  A lire plusieurs fois de A à Z :

                  http://mapage.noos.fr/emdel/codage.htm

                  @Sl@w3k
                  D'après tes screens, ça devrait fonctionner. Fait une régénération du code (ctrl-f11) et poste le copié/comé (click-droit etc.) de la fenêtre de compilation.

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Music only !
                    26 septembre 2007 à 21:04:39

                    Voila:

                    1. -------------- Génère: Debug dans test2 ---------------
                    2. Compilation : main.c
                    3. Liaison exécutable en console: .\test2.exe
                    4. obj\Debug\main.o: In function `main':
                    5. D:/raf/Documents de raf/programmation/C/2) Techniques avancées/1) La programmation modulaire/test2/main.c:7: undefined reference to `bonjour'
                    6. collect2: ld returned 1 exit status
                    7. Le processus s'est terminé avec le statut 1 (0 minutes, 0 secondes)
                    8. 1 erreurs, 0 avertissements
                    • Partager sur Facebook
                    • Partager sur Twitter
                      26 septembre 2007 à 21:18:30

                      Citation : Sl@w3k

                      Voila:

                      1. -------------- Génère: Debug dans test2 ---------------
                      2. Compilation : main.c
                      3. Liaison exécutable en console: .\test2.exe
                      4. obj\Debug\main.o: In function `main':
                      5. D:/raf/Documents de raf/programmation/C/2) Techniques avancées/1) La programmation modulaire/test2/main.c:7: undefined reference to `bonjour'
                      6. collect2: ld returned 1 exit status
                      7. Le processus s'est terminé avec le statut 1 (0 minutes, 0 secondes)
                      8. 1 erreurs, 0 avertissements

                      Je n'aime pas du tout voir ces espaces dans les répertoires...

                      Il semblerait que le fichier bonjour.c ne fasse pas partie du projet (il n'a pas été recompilé).

                      Je serais toi je ferais ceci :

                      - quitter C::B
                      - supprimer tous les fichiers du répertoire du projet sauf les 2 .c et le .h (les fichiers sources).
                      - relancer C::B
                      - recréer un projet C dans ce répertoire en ajoutant les 3 fichiers
                      - rebuild-all (ctrl-F11).
                      - Poster le contenu la fenêtre de compilation.
                      • Partager sur Facebook
                      • Partager sur Twitter
                      Music only !
                        26 septembre 2007 à 21:40:04

                        Problème résolut.

                        Merci tout le monde et sûrtout -ed-.

                        Le problème c'était que je ne savais pas que je devais cochez les cases "Debug" et "Release" quand je créer un nouveau fichier. Je cochez seulement "Ajouter le fichier au projet actif ..." et aparament ça ne suffit pas.

                        Merci encore.
                        • Partager sur Facebook
                        • Partager sur Twitter

                        [Cours] La programmation modulaire

                        × 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