Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème d'include : Comment faites vous?

Chevron guillemet et preproceseur

    2 mars 2022 à 10:36:28

    Bonjour à tous,

    J'ai un problème qui relève plus du problème architecture que de codage: Mon problème est identique à ce sujet : https://openclassrooms.com/forum/sujet/include-et-dossiers

    Comme Dragonic : Le problème est le suivant : j'ai un très gros code à maintenir qui contient plusieurs librairies externe ainsi que du code interne.

    Chaque librairies contient ses propres includes pour pouvoir les compiler.

    Je possède aussi mes includes pour mon projet.

    La conséquence de cela est que je me retrouve avec un très grand nombre d'include au niveau du préprocesseur. Et parfois suivant les noms des fichiers on peut penser qu'au niveau de la phase de link on ne prenne pas le bon fichier, de plus de confondre les fichiers entre les librairies, lors d'une mise à jour d'une dernière cela complique encore plus les choses en cas d'erreur. 

    Quel est donc votre méthode pour limiter ces includes -I afin de compiler de gros projets et afin d'éviter les erreurs de ce type ?

    Bien cordialement.

    Kasi

    -
    Edité par Kasimashi 2 mars 2022 à 10:39:12

    • Partager sur Facebook
    • Partager sur Twitter
      2 mars 2022 à 11:01:25

      Salut,

      Je dirais qu'il faut compartimenter.

      Si tu as une lib A, une lib B, et une lib C, il faut que tu identifies quelles fonctions de tes libs tu utilises. Des points d'entrée.

      Et tu te fais un .h pour la lib A qui contient les include necessaires pou A. Un .h pour la lib B qui contient les include nécessaires pour B...

      Et ainsi dans ton projet principal, tu n'inclus qu'un .h pour la lib A, un seul pour la lib B...

      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        2 mars 2022 à 11:03:22

        Faire les includes des fichiers entêtes dont le  fichier source à besoin et pas plus et ce pour chaque fichier source.
        • Partager sur Facebook
        • Partager sur Twitter
        ...
          2 mars 2022 à 11:21:54

          Bonjour,

          gros projet ? quelle outil de gestion de projet utilises-tu ? meson ? autoconf ? make ? cmake ? … car tu en utilises un n'est-ce pas ?

          • Partager sur Facebook
          • Partager sur Twitter
            2 mars 2022 à 16:41:41

            Il y a aussi une méthode pour éviter les includes lorsqu' il y a des pointeurs, la déclaration anticipée ( que j'utilise souvent en C++ ). Mais cela peut aussi marcher en C. Quand dans un fichier d' en-tête on passe un type par adresse ou un pointeur par valeur on est pas obligé d' inclure l' en-tête qui defini ce type (en C il s' agit surtout d'une structure ).
            • Partager sur Facebook
            • Partager sur Twitter

            Mon site web de jeux SDL2 entre autres : https://www.ant01.fr

              2 mars 2022 à 21:13:58

              Salut,

              Personnellement, j'inclus et c'est tout. Si ça prend 25 inclusions alors ainsi soit-il. Mon choix est orienté par une volonté de transparence, j'aime me relire sans avoir à me déchiffrer.

              J'ai appris très rapidement qu'être clair et explicite en tout temps est bien plus précieux qu'une "optimisation" opaque... Si vraiment ça optimise quelque chose.

              Parfois, les quelques secondes que tu vas gagner maintenant en voulant "planquer" un truc pour rendre les choses faciles, te coûteront plusieurs minutes de retro-engineering pour te relire alors que ton "astuce" te sera sortie de la tête. Disons dans 10 ans.

              Si j'ai besoin d'exporter un fichier, les dépendances sont signifiées dans ce même fichier, pas besoin de se perdre en recherches de références croisées en références croisées.

              Bonne continuation.

              -
              Edité par drx 2 mars 2022 à 21:20:03

              • Partager sur Facebook
              • Partager sur Twitter

              Bonhomme !! | Jeu de plateforme : Prototype.

                3 mars 2022 à 21:36:13 - Message modéré pour le motif suivant : Merci de créer votre propre sujet


                  3 mars 2022 à 21:52:34

                  mouais mais bon, ce n'est pas qu'une histoire d'include … c'est une gestion de projets avec des bibliothèques externes qui sont apparemment compilées exprès pour le projet (ce qui en soit n'est pas une mauvaise chose). Et là il faut absolument avoir quelque chose qui gère le projet globalement sinon on s'arrache les cheveux.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    4 mars 2022 à 20:49:09

                    Kasimashi a écrit:

                    Bonjour à tous,

                    J'ai un problème qui relève plus du problème architecture que de codage: Mon problème est identique à ce sujet : https://openclassrooms.com/forum/sujet/include-et-dossiers

                    Comme Dragonic : Le problème est le suivant : j'ai un très gros code à maintenir qui contient plusieurs librairies externe ainsi que du code interne.

                    Chaque librairies contient ses propres includes pour pouvoir les compiler.

                    Je possède aussi mes includes pour mon projet.

                    La conséquence de cela est que je me retrouve avec un très grand nombre d'include au niveau du préprocesseur. Et parfois suivant les noms des fichiers on peut penser qu'au niveau de la phase de link on ne prenne pas le bon fichier, de plus de confondre les fichiers entre les librairies, lors d'une mise à jour d'une dernière cela complique encore plus les choses en cas d'erreur. 

                    Quel est donc votre méthode pour limiter ces includes -I afin de compiler de gros projets et afin d'éviter les erreurs de ce type ?

                    Bien cordialement.

                    Kasi

                    - compartimenter

                    - limiter l'interface publique à l'essentiel

                    - proprement définir les dépendances de chaque "target" de manière fine (ni plus ni moins)

                    - pas de nom générique pour les headers publiques, ou alors les isoler dans un répertoire dont le nom n'est pas générique

                    - préfixer ses symboles en C pour éviter les collisions

                    - éviter de faire baver les dépendances externes dans les headers publiques

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème d'include : Comment faites vous?

                    × 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