Partage
  • Partager sur Facebook
  • Partager sur Twitter

Structure et #define communs à plusieurs fichiers

[Résolu]

    27 mai 2015 à 20:44:57

    Bonjour les codeurs!

    Je suis bien content d'être inscrit sur ce site, j'en ai appris des choses grace aux tutoriels!

    Bref, j'ai une question qui reste sans réponse après 2 jours de recherches.

    Je m'explique, pour faire simple imaginons que j'ai 3 fichiers, 1 contenant la fonction main, puis 2 autres contenant 2 fonctions differentes utilisant une structure commune :

    #include "Fonctions.h"
    #include "Ecran.h"
    
     typedef struct {
        unsigned int A;
        unsigned int B;
        unsigned int C;
    }typestruct;
    
    
    int main(void) 
    {
        typestruct mastructure;
        mastructure.A = 1;
        mastructure.B = 2;
        mastructure.C = 3;
        return 0;
    }

    Puis un autre fichier utilisant la même structure (Fonctions.c):

    #include "Fonctions.h"
    
    void ModifStructure(typestruct *nomdemastructure)
    {
        nomdemastructure.B = 0;
    }


    Son fichier d'en-tête (Fonctions.h):

    #ifndef FONCTIONS_H
    #define    FONCTIONS_H
    
    void ModifStructure(typestruct *nomdemastructure);
    
    #endif    /* FONCTIONS_H */
    


    Et encore un autre fichier (Ecran.c):

    void EffaceEcran(typestruct *nomstructure)
    {
        nomstructure.A = 0;
    }
    

    Et enfin son fichier d'en-tête (Ecran.h):

    #ifndef ECRAN_H
    #define	ECRAN_H
    
    void EffaceEcran(typestruct *nomstructure);
    
    #endif	/* ECRAN_H */



    A savoir que je programme pour un microcontroleur et que ces quelques lignes de code ne servent a rien; Juste pour que je comprenne comment faire. Ca ne change pas grand chose mais au moins vous le savez :)

    Mon problème est que mes 2 fichiers qui contiennent mes fonctions (Fonctions.c et Ecran.c) ne reconnaissent pas le type que j'ai défini dans le fichier qui contient mon programme principal. Dans le cas ou j'ai un seul fichier avec des fonctions, il suffit de mettre la "déclaration" de la structure typestruct dans le fichier d'en-tête mais lorsque j'ai deux ou meme dix fichiers differents, comment faire pour que ma "déclaration" de structure soit commune aux fichiers? J'espere que c'est clair :D

    Ensuite de la même facon, comment faire pour créer des #define utilisable dans chaque fichier du projet? (Par exemple, #define TRUE 1)

    Et pendant que j'y suis, j'ai pour (mauvaise?) habitude de créer un fichier d'en-tête pour le fichier C qui contient le programme principal. Est-ce que ca se fait?

    Merci beaucoup pour l'aide que vous me donnerez, je commence a tourner à rond avec toutes mes questions! :waw:

    Bonne soirée :)

    -
    Edité par AurélienL 14 juin 2015 à 10:59:41

    • Partager sur Facebook
    • Partager sur Twitter
      27 mai 2015 à 20:51:25

      Les .h sont fait pour mettre des definition.

      Du coup, tu dois mettre la définir dans un .h.

      Pareil pour les defines utile. Cependant, true est déjà défini dans stdbool.h. Le mensonge qui dit qu'il n'y a pas de bool en C est faux.
      • Partager sur Facebook
      • Partager sur Twitter

      🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

        28 mai 2015 à 12:29:00

        Bonjour et merci pour la réponse :)

        Je suis d'accord que les structures et les #define sont à mettre dans un fichier d'en-tête mais lorsque que j'ai plusieurs fichiers en C qui utilisent la même structure (Par exemple une structure Date); je suis obligé de mettre la même structure dans chaque fichier d'en-tête? Il n'y a pas un moyen de faire comprendre que cette structure est commune à tout les fichiers? Idem pour les #define?

        Pour le TRUE ce n'était qu'un exemple, pour mon cas, je pensais a une fréquence de fonctionnement : #define FREQ 8000000

        Je trouve ca dommage de devoir définir dans chaque fichier la fréquence par exemple, surtout que forcement, c'est toujours la même

        On peut remédier à ca?

        Merci

        -
        Edité par AurélienL 28 mai 2015 à 12:29:31

        • Partager sur Facebook
        • Partager sur Twitter
          28 mai 2015 à 12:36:08

          AurélienL a écrit:

          Je suis d'accord que les structures et les #define sont à mettre dans un fichier d'en-tête mais lorsque que j'ai plusieurs fichiers en C qui utilisent la même structure (Par exemple une structure Date); je suis obligé de mettre la même structure dans chaque fichier d'en-tête? Il n'y a pas un moyen de faire comprendre que cette structure est commune à tout les fichiers? Idem pour les #define?

          Ya toujours moyen ...
          Utiliser un makefile qui se charge de le faire ... Le rajouter dans les options de compilation, ...
          M'enfin rien de propre selon moi.<

          Dis toi qu'en Java, c'est 1fichier par class. Ici, tu fais autant de structure que tu veux ... La restriction c'est que le compilateur lit séquencielement.

          • Partager sur Facebook
          • Partager sur Twitter

          🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

            28 mai 2015 à 12:46:21

            Salut

            Si c'est une structure globale pour ton programme, déclare-la dans un fichier "structures.h" et inclus ce fichier partout où tu en as besoin. C'est le plus simple si tu veux éviter de jouer avec les options de compilation...

            • Partager sur Facebook
            • Partager sur Twitter
              28 mai 2015 à 14:35:04

              Si tu joues avec les options de compilation, tu vas avoir des problèmes au bout d'un moment ... Tu vas t'y perdre.
              Le plus simple c'est de faire "commun.h" dans lequel tu mets toutes les définitions.

              Encore plus propre, un commun.h de cette forme :

              #ifndef COMMUN.H
              #define COMMUN.H
              
              #include "commun_t.h" // Pour les structures
              #include "commun_d.h" // Pour les defines
              #include "commun_f.h" // Pour les fonctions
              
              #endif


              Mais tu peux très bien mettre tout d'un coup aussi.

              • Partager sur Facebook
              • Partager sur Twitter

              🍊 - Étudiant - Codeur en C | Zeste de Savoir apprenez avec une communauté | Articles  - ♡ Copying is an act of love.

                14 juin 2015 à 10:58:08

                Bonjour à tous,

                Merci pour toute vos réponses, ça m'a permit de résoudre mon problème.

                Finalement j'ai préféré créer un fichier commun.h plutôt que de créer un fichier makefile. Pas très propre non plus selon moi.

                Par contre j'ai directement mis mes structures et définitions communes dans le fichier, je n'en ai pas assez pour recréer un fichier à chaque fois mais je retiens l'idée!

                Merci beaucoup pour votre aide, et vive le forum! ;)

                • Partager sur Facebook
                • Partager sur Twitter

                Structure et #define communs à plusieurs fichiers

                × 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