headers et sources en C
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 52

headers et sources en C



  1. #1
    christophe_de_Berlin

    headers et sources en C


    ------

    Bonjour, je suis hyper débutant en programmation et voilà mon problème de débutant, tout bête:
    J´ai lu comment on construit tout un projet, sa structure en plusieurs fichiers:

    - Le fichier main.c
    - les fichiers .h
    - les fichiers .c

    Bon, d´après ce que j´ai compris, on écrit que la fonction main() dans le main.c, on inclus les headers .h, dans ces headers on écrit les prototypes des fonctions et dans les fichiers .c du même nom que les .h, on écrit les fonctions en question. C´est ce que j´ai fait dans un test, sauf que chez moi, ca marche pas:

    J´ai un fichier main.c où j´ai ca:

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

    #include "bin/Debug/test.h"

    int main()
    {

    test();

    }
    ----
    j´ai donc inclus ma fonction test.h
    Ma fonction test.h a ca:

    ---
    test();
    --
    Je sais, c´est pas beaucoup car c´est qu´un test hein!
    Dans mon fichier test.c j´ai ca:

    ---
    void test()
    {
    printf("salut")
    }
    ---
    Normalement ca devrait m´afficher "salut", ben non, le compilateur ne trouve pas la fonction test(), mais je sais pas à quel niveau: est-ce qu´il trouve pas le header test.h? Ou est-ce que dans le header il trouve pas le fichier test.c?
    Je sais pas.

    Merci d´avance pour vos suggestions.
    Ah c´est dur d´être débutant...

    Christophe

    PS: j´utilise CODE::BLOCK comme environnement

    -----

  2. #2
    christophe_de_Berlin

    Re : headers et sources en C

    J´ai moi-même une suggestion: comment le header "machin.h" fait-il la connection avec le fichier "machin.c"? est-ce que ca suffit qu´ils aeint le même nom avec des extentions différentes? C´est peut-être là que réside mon erreur non?

  3. #3
    invite4492c379

    Re : headers et sources en C

    Hello,

    Rapidement je dirais que ton chemin n'est pas valide, ça m'étonnerait que test.h se trouve dans un répertoire bin/debug.
    Pour t'aider à débugguer tu pourrais éventuellement nous inclure les messages d'erreurs du compilateur ...

  4. #4
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    J´ai moi-même une suggestion: comment le header "machin.h" fait-il la connection avec le fichier "machin.c"? est-ce que ca suffit qu´ils aeint le même nom avec des extentions différentes? C´est peut-être là que réside mon erreur non?
    Le seul lien est celui que toi tu donnes
    Par convention tu déclares dans «machin.h» tout ce que tu veux rendre disponible aux autres parties de ton projet et qui est défini dans «machin.c».
    Tout est bien expliqué sur http://www.siteduzero.com/tutoriel-3...modulaire.html

  5. A voir en vidéo sur Futura
  6. #5
    christophe_de_Berlin

    Re : headers et sources en C

    oui, je me doutais qu´il s´agissait de quelquechose comme ca, mais alors j´ai essayé autrement:
    J´ai mis mon test1.c dans le dossier "sources" et mon test1.h dans le dossier Headers, exactement comme décrit dans le sîte du zéro. Même erreur: il ne trouve pas la fonction test().

  7. #6
    invite4492c379

    Re : headers et sources en C

    En fait c'est pas si compliqué que ça ...
    Le compilateur sait où trouver les headers systèmes, ce sont les headers que tu inclues avec un #include<>, les autres que tu inclues avec #include "" il va les chercher à l'endroit où se trouve le source. Si tu lui mets ailleurs il ne les trouvera pas.
    Tu as plusieurs choix :

    * tu mets tout dans un répertoire et tu utilises #include "machin.h"
    * tu crées un répertoire headers dans ton répertoire source et tu utilises #include "headers/machin.h"
    * tu regroupes les headers dans un répertoire quelconque et tu donnes au compilateur via l'option -I (généralement) une liste de répertoires où il ira les chercher.

    Le plus simple au début étant de laisser les .c et les .h ensemble.

  8. #7
    ventilopomme

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    void test()
    {
    printf("salut")
    }
    salut
    rien ne te choque il manque pas quelque chose ?
    En c comment on termine une instruction ?
    Le compilateur te signale pas une anomalie comme quoi il manque un ';'
    tu me dois un café !
    exclu à jamais du présent

  9. #8
    christophe_de_Berlin

    Re : headers et sources en C

    Merci de ta patience photon57, je vais essayer d´y voir plus clair. Mais il me semble que normalement, mon IDE Code::Block devrait faire ca tout seul non? Après tout il ne m´a pas donné le choix où je place mes .h et mes .c.

  10. #9
    Fanch5629

    Re : headers et sources en C

    Les joies du C/C++ ...

  11. #10
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    Merci de ta patience photon57, je vais essayer d´y voir plus clair. Mais il me semble que normalement, mon IDE Code::Block devrait faire ca tout seul non? Après tout il ne m´a pas donné le choix où je place mes .h et mes .c.
    Je ne connais pas code blocks plus que ça mais normalement tu sais où tu sauve tes fichiers ... il faudrait potasser le manuel de l'IDE

  12. #11
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    Merci de ta patience photon57, je vais essayer d´y voir plus clair. Mais il me semble que normalement, mon IDE Code::Block devrait faire ca tout seul non? Après tout il ne m´a pas donné le choix où je place mes .h et mes .c.
    J'ai trouvé dans la doc :

    Note:
    If you deactivate ’Project tree’ /’Categorize by file types’ in the context menu, the category display will be switched off, and the files will be listed as they are stored in the file system.

  13. #12
    bzh_nicolas

    Re : headers et sources en C

    Pas mal de remarques à faire :
    1- Comme on te l'a dit vérifie le chemin de ton fichier d'entête
    2- Attention au code dans ta fonction test, il est faux.
    3- Le prototype de ta fonction test dans test.h est faux. Il manque le type de retour.
    4- Ca peut-être une bonne habitude d'inclure systématiquement le fichier header dans le fichier source lui correspondant, ainsi que dans tous les autres fichiers source qui vont utiliser ce qui y est défini.
    Pour éviter les problèmes d'inclusions multiples suite à ça, regarde du côté des directives #ifndef et #define
    Par exemple dans test.h
    Code:
    #ifndef TEST_H
    #define TEST_H
    /*
    les prototypes etc...
    */
    #endif

  14. #13
    christophe_de_Berlin

    Re : headers et sources en C

    oui, merci de ta suggestion Ventilopomme, j´ai corrigé la chose, mais là n´est pas l´erreur que je chercher, c´est la fonction test elle-même qu´il ne trouve pas.

  15. #14
    christophe_de_Berlin

    Re : headers et sources en C

    merci de ta suggestion mais c´est pas ca, le truc est bien activé.

  16. #15
    christophe_de_Berlin

    Re : headers et sources en C

    Bon, je veux être plus précis: quand je compile, j´obtiens un point rouge dans ma fonction main() de mon fichier main.c à la ligne test(); et le message d´erreur est: "undifined reference to `test`
    Mais quand dans ma fonction main() j´écris void test() au lieu de test(), alors j´ai pas de message d´erreur, mais il imprime pas le "salut", donc ma fonction test n´est apparement pas atteinte...
    pff.... faut des nerfs d´acier pour commencer.

  17. #16
    invite4492c379

    Re : headers et sources en C

    Hello,

    Il me semble que tu as peut-être plusieurs problèmes, entre autre liés à l'utilisation de code blocks.
    Quand tu fais de la programmation modulaire il y a forcément un mécanisme qui décrit ton architecture, par exemple un makefile.
    Cela décrit par exemple :

    main.c dépend de test.h (si tu modifies ton prototype alors main.c doit être recompilé)
    test.c dépend de test.h

    pour créer main.exe il faut (linker) main.o et test.o

    pour créer main.o il faut compiler main.c
    pour créer test.o il faut compiler test.c

    ----

    à mon avis tu n'as pas créer le projet dans le sens il n'y a aucune dépendences ... jette un coup d'oeil sur http://www.siteduzero.com/tutoriel-3...html#ss_part_2

  18. #17
    Jack
    Modérateur

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    Merci de ta patience photon57, je vais essayer d´y voir plus clair. Mais il me semble que normalement, mon IDE Code::Block devrait faire ca tout seul non? Après tout il ne m´a pas donné le choix où je place mes .h et mes .c.
    Ce n'est pas vrai. Quand tu fais new file -> file, l'ide te demande le nom du fichier et son emplacement. Lorsque tu crées un ficher d'entête, un item apparait dans le gestionnaire de projet également.

    Ensuite, il te reste plein d'erreurs à corriger:
    Dans le header test.h, il faut mettre le prototype de la fonction test:
    Code:
    void test();
    Ensuite,
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    sont mal placés et ne servent à rien dans main.c. Il faut les mettre dans test.c, là où est appelée la fonction printf().

    Enfin, ne pas oublier
    Code:
    #include "test.h"
    dans main.c

    A+

  19. #18
    Fanch5629

    Re : headers et sources en C

    Bonjour.

    Dans un premier temps, il vaut peut-être mieux se contenter de tout écrire dans le même fichier source :

    Code:
    #include <...>
    
    void test()  // définition avant l'appel dans main()
    {
    }
    
    int main()
    {
    test();
    return 0;
    }
    et vérifier que cela fonctionne.

    Les include en C/C++ peuvent vite devenir une source d'emm...

  20. #19
    christophe_de_Berlin

    Re : headers et sources en C

    Citation Envoyé par Fanch5629 Voir le message
    Les joies du C/C++ ...
    Oh, merci, tu fais avancer le chmilblick...

  21. #20
    christophe_de_Berlin

    Re : headers et sources en C

    Citation Envoyé par Fanch5629 Voir le message
    Bonjour.

    Dans un premier temps, il vaut peut-être mieux se contenter de tout écrire dans le même fichier source :

    Code:
    #include <...>
    
    void test()  // définition avant l'appel dans main()
    {
    }
    
    int main()
    {
    test();
    return 0;
    }
    et vérifier que cela fonctionne.

    Les include en C/C++ peuvent vite devenir une source d'emm...
    oui, mais dès que ton projet atteind une certaine dimension au delà d´un exo d´école, de toute manière il faut des includes, et d´autre part cette fonction existe, ya pas de raison de pas s´en servir.

  22. #21
    christophe_de_Berlin

    Re : headers et sources en C

    Citation Envoyé par Jack Voir le message
    Ce n'est pas vrai. Quand tu fais new file -> file, l'ide te demande le nom du fichier et son emplacement. Lorsque tu crées un ficher d'entête, un item apparait dans le gestionnaire de projet également.

    Ensuite, il te reste plein d'erreurs à corriger:
    Dans le header test.h, il faut mettre le prototype de la fonction test:
    Code:
    void test();
    Ensuite,
    Code:
    #include <stdio.h>
    #include <stdlib.h>
    sont mal placés et ne servent à rien dans main.c. Il faut les mettre dans test.c, là où est appelée la fonction printf().

    Enfin, ne pas oublier
    Code:
    #include "test.h"
    dans main.c

    A+
    Merci, j´ai fait exactement tout ce que tu dis: D´abord, maintenant mes fichiers main.c, test.c et test.h sont dans le même dossier. Ensuite mon main.c a cette allure:

    #include "test.h"

    int main()
    {
    testme();

    }

    Mon test.h a cette allure:

    void testme();

    Enfin mon test.c a cette allure:

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

    void testme()
    {
    printf("ouf");
    return 0;
    }


    Voilà.... et ca marche pas, désolé. Je retrouve la même annonce d´erreur comme quoi il trouve pas la fonction testme().

  23. #22
    Fanch5629

    Re : headers et sources en C

    Oh, merci, tu fais avancer le chmilblick...
    Faut pas le prendre mal.

    J'ai pas mal d'années de programmation derrière moi, avec plusieurs langages, et j'en suis arrivé à la conclusion que la pire façon d'apprendre à programmer est de commencer par le C.

    Il suffit d'examiner de près les codes des logiciels open source écrits en C/C++ disponibles sur le net pour s'apercevoir que, mis entre des mains novices et/ou non professionnelles, il n'en sort qu'une bouillie infâme, même si l'application fonctionne. Bonjour pour les évolutions.

    Aujourd'hui, pour qui veut se former, il y a d'autres voies. La première est de se mettre directement à la programmation orientée objet. L'approche procédurale du type C est un archaïsme et une perte de temps.

    Mais chacun est libre de faire comme bon lui semble.

    Perso, depuis que j'ai découvert C#, je n'ai plus écrit une ligne de C/C++.

    Cordialement.

  24. #23
    Fanch5629

    Re : headers et sources en C

    Re.

    Si ma mémoire est bonne, le fichier test.h devrait contenir :

    extern void testme();

  25. #24
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par Fanch5629 Voir le message
    (...)

    Il suffit d'examiner de près les codes des logiciels open source écrits en C/C++ disponibles sur le net pour s'apercevoir que, mis entre des mains novices et/ou non professionnelles, il n'en sort qu'une bouillie infâme, même si l'application fonctionne. Bonjour pour les évolutions.

    Aujourd'hui, pour qui veut se former, il y a d'autres voies. La première est de se mettre directement à la programmation orientée objet. L'approche procédurale du type C est un archaïsme et une perte de temps.

    Mais chacun est libre de faire comme bon lui semble.

    Perso, depuis que j'ai découvert C#, je n'ai plus écrit une ligne de C/C++.

    Cordialement.
    Je plussoie

  26. #25
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    Merci, j´ai fait exactement tout ce que tu dis: D´abord, maintenant mes fichiers main.c, test.c et test.h sont dans le même dossier. Ensuite mon main.c a cette allure:
    (...)
    Comment as-tu créé ton projet ? Il me semble que les symptômes indiquent que les dépendences ne sont pas correctement données.

  27. #26
    invite765732342432
    Invité

    Re : headers et sources en C

    Citation Envoyé par christophe_de_Berlin Voir le message
    Voilà.... et ca marche pas, désolé. Je retrouve la même annonce d´erreur comme quoi il trouve pas la fonction testme().
    Commande de compilation et logs de compilation complets permettraient de voir d'où vient l'erreur.
    J'aurais tendance à croire qu'il ne s'agit pas d'un problème de compilation mais de linkage...

    Si ma mémoire est bonne, le fichier test.h devrait contenir :

    extern void testme();
    Eux... extern, c'est pour les bibliothèques, il me semble.
    il est loin d'en être là !

  28. #27
    invite4492c379

    Re : headers et sources en C

    Citation Envoyé par Faith Voir le message
    Commande de compilation et logs de compilation complets permettraient de voir d'où vient l'erreur.
    J'aurais tendance à croire qu'il ne s'agit pas d'un problème de compilation mais de linkage...
    (...)
    Exactement ... mauvaises dépendences ...

  29. #28
    invite765732342432
    Invité

    Re : headers et sources en C

    Allez, je ne résiste pas à l'appel du troll:
    Citation Envoyé par Fanch5629 Voir le message
    Il suffit d'examiner de près les codes des logiciels open source écrits en C/C++ disponibles sur le net pour s'apercevoir que, mis entre des mains novices et/ou non professionnelles, il n'en sort qu'une bouillie infâme, même si l'application fonctionne. Bonjour pour les évolutions.
    L'approche procédurale du type C est un archaïsme et une perte de temps.
    L'objet codé par un novice, c'est au moins aussi imbitable que du C.

    En ce qui me concerne, je reste fidèle au C qui impose une certaine rigueur dans la réflexion pour faire du code qui marche.

  30. #29
    christophe_de_Berlin

    Re : headers et sources en C

    Citation Envoyé par photon57 Voir le message
    Je plussoie
    Heu... tu plusssoies? Tu peux m´apprendre la signification du verbe plussoyer?

  31. #30
    christophe_de_Berlin

    Re : headers et sources en C

    Citation Envoyé par photon57 Voir le message
    Comment as-tu créé ton projet ? Il me semble que les symptômes indiquent que les dépendences ne sont pas correctement données.
    AYÉ!!! C´était exactement le problème: effectivement il manquait la dépendance. J´avais naivement cru que si j´ouvre un nouveau fichier à l´intérieur d´un projet, et ben.... qu´il est dans ce projet. ben non: une fois que les fichiers sont créés, il faut cliquer droit sur le projet et y ajouter les deux fichiers en question. Maintenant ca marche. Merci à tous de votre aide.

    Quant-au débat "commencer par C", moi je commence par C disons pour des questions de pédagogie, je vais essayer d´aller le plus rapidement sur C++.

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Problème de headers / erreur: aucun fichier ou dossier de ce type
    Par invited301641a dans le forum Logiciel - Software - Open Source
    Réponses: 5
    Dernier message: 04/06/2010, 14h24
  2. Matlab - Acceder aux headers d un fichier dicom
    Par invite92af0e86 dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 28/04/2009, 15h48
  3. Sources C / Structure
    Par invitee5fedd72 dans le forum Logiciel - Software - Open Source
    Réponses: 6
    Dernier message: 08/04/2007, 06h05
  4. Sources Hydrothermales
    Par invite471c96af dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 01/10/2006, 17h56