Partage
  • Partager sur Facebook
  • Partager sur Twitter

Question architecture fichiers .c et .h

    23 octobre 2019 à 12:36:11

    Bonjour,

    Je poste un message sur ce forum car je suis en train de terminer un projet d'informatique. Avant de le rendre je souhaitais organiser mon code de façon modulaire, mais je suis à peu près sûr de mal m'y prendre.  

    Mon projet est constitué de 3 fichiers principaux qui travaillent ensemble sans s'appeler directement (mais en s'envoyant des signaux). Voici une représentation graphique sommaire de l'état de l'architecture.

    • Tout le projet tourne autour du fichier "Header.c" qui contient le code de fonctions utilisées dans les 3 fichiers "FichierX.c" ainsi que la déclaration de variables globales dont la valeur est utilisée dans presque tous les autres fichiers. Le fichier appelle "Header.h"
    • Le fichier "Header.h" contient les prototypes des fonctions de "Header.c". Il ne fait aucun appel.
    • Chaque fichier principal "fichierX.c" ne contient que sa fonction main(). Les autres fonctions qu'il est le seul à utiliser sont soit définies dans le "header.c" si elles sont utilisées par les 3 fichiers principaux soit définies dans le fichier "fonctionsX.c" correspondant. (Les fonctions utilisées uniquement par "fichier1.c" le sont dans "fonctions1.c"). Le fichier utilise des variables globales du fichier "Header.c" qu'il l'appelle par un "includes", comme il appelle le fichier "fonctionsX.h" pour utiliser ses fonctions personnelles. 
    • Chaque fichier "fonctionsX.c" contient uniquement des corps de fonctions. Il fait également appel au fichier "Header.h" car les fonctions travaillent avec ses variables globales. 
    • Chaque fichier "FonctionsX.h" contient uniquement les signatures du fichier "fonctionsX.c" correspondant. 

    J'ai conscience de la médiocrité de mon organisation puisque je n'ai pas encore réussi à compiler correctement le programme, mais je n'arrive pas à comprendre les règles de la programmation modulaire que je ne suis pas et adorerais quelques explications.

    J'espère avoir été assez clair dans mes explications, et je vous remercie d'avance ! 

    -
    Edité par Elexir 23 octobre 2019 à 19:38:08

    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2019 à 13:11:34

      Elexir a écrit:

      • Chaque fichier principal "fichierX.c" ne contient que sa fonction main(). 
      Rien que ça doit empêcher l'éditeur de liens de générer un exécutable car il ne doit y avoir qu'une seule fonction main en tout et pour tout, laquelle doit servir de point d'entrée au programme.
      • Partager sur Facebook
      • Partager sur Twitter
        23 octobre 2019 à 13:21:27

        Salut zoup, merci pour ta réponse. 

        En fait les 3 fichiers fonctionnent indépendamment les uns des autres. Ils ont un exécutable chacun, évoluent en parallèle et communiquent entre eux via des signaux. Ils ont simplement le point commun d'utiliser les mêmes variables globales définies dans le fichier "Header". 

        • Partager sur Facebook
        • Partager sur Twitter
          23 octobre 2019 à 14:42:52

          Comment 3 exécutables évoluant au sein de processus indépendants peuvent-il utiliser des variables globales déclarées dans un fichier d'entête?

          Chaque processus utilise son propre espace mémoire et il est donc impossible de partager des variables de manière aussi simple.

          Pour partager de la mémoire, il faut passer par les IPC sous UNIX par exemple, et utiliser des segments de mémoire partagée, mais c'est un peu plus compliqué. 

          • Partager sur Facebook
          • Partager sur Twitter
            23 octobre 2019 à 15:03:45

            Effectivement, je pense que je n'utilise pas le bon terme. 

            La variable globale est définie dans "header.c" mais chacun en fait sa propre utilisation puisque effectivement ils ont des espaces mémoire différents. Ce que je voulais dire par là c'est que dans header.c je définis une dizaine de chaînes de caractères et dans chaque exécutable, j'ai une variable locale "état" qui peut prendre ces différentes valeurs.

            • Partager sur Facebook
            • Partager sur Twitter
              23 octobre 2019 à 15:53:59

              Ce que je ne comprends pas, c'est l'intérêt de header.c.

              Un fichier .c n'a pas à être inclus dans d'autres fichiers. Puisqu'il ne s'agit que de simples déclarations ou de constantes, pourquoi ne pas tout mettre dans header.h?

              • Partager sur Facebook
              • Partager sur Twitter
                23 octobre 2019 à 16:05:25

                J'ai crée "header.c" car je pensais que je ne pouvais mettre que des prototypes dans "header.h". J'ai donc mis tout le code de mes fonctions dans header.c. Ce n'est pas correct ?
                • Partager sur Facebook
                • Partager sur Twitter
                  23 octobre 2019 à 17:35:57

                  Ca ne se fait pas.

                  Un petit peu de lecture ...

                  -
                  Edité par zoup 23 octobre 2019 à 17:42:34

                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 octobre 2019 à 17:41:43

                    Pourrais-tu être plus explicite ? Que dois-je faire pour corriger mon architecture ? Quelles sont pratiques à suivre ? 

                    Je te remercie

                    • Partager sur Facebook
                    • Partager sur Twitter
                      23 octobre 2019 à 17:44:47

                      Je t'ai ajouté un lien.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        23 octobre 2019 à 19:37:27

                        Merci pour ton lien. Je n'ai toujours pas tout compris, mais j'ai avancé. 

                        Je réalise aussi que l'illustration graphique que j'ai glissée dans mon premier message était un brouillon et ne reflète en rien, l'architecture actuelle de mes fichiers... 

                        Si je peux avoir une seconde chance, je vais résumer mon problème en beaucoup plus simple : 

                        J'ai un fichier "principal.c" qui contient le coeur de mon code, dont une fonction main et 6 autres fonctions. Pour alléger mon code, je souhaiterais sortir de "principal.c" ces 6 fonctions auxiliaires. Comment dois-je m'y prendre? (Particularité : toutes les fonctions du code utilisent des fonctions et des variables définies dans un fichier "bdd.h")

                        Merci encore

                        -
                        Edité par Elexir 23 octobre 2019 à 19:37:49

                        • Partager sur Facebook
                        • Partager sur Twitter
                          23 octobre 2019 à 20:43:07

                          Tu crées "mesFonctions.h" qui contient la déclaration de ces 6 fonctions et "mesFonctions.c" qui contient leurs définitions.

                          "mesFonctions.c" inclut "mesFonctions.h" et un de ces 2 fichiers inclut "bdd.h" selon le fichier où le besoin de"bdd.h" est exprimé.

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Question architecture fichiers .c et .h

                          × 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