Partage
  • Partager sur Facebook
  • Partager sur Twitter

fonctions dans une fonction, et headers

    25 mars 2022 à 16:25:09

    Bonjour,

    je suis en train de faire des exercices sur les headers.

    J'ai créé un fichier fonctions.c et son header fonctions.h

    Ensuite j'ai créé un fichier application.c et son header application.h

    Dans le dossier application.c j'utilise des fonctions présentent dans le fichier fonctions.c

    Depuis main.c je n'utilise pas directement les fonctions de fonctions.c mais seulement les fonctions présentent dans application.c

    Je sais déjà que je devrai mettre un #include "application.h" dans le main.c

    mes questions sont:

    Est-ce que je dois faire un #include " fonctions.h" dans application.c? (comme on le ferait dans main.c)

    Est-ce que je dois aussi mettre un #include "fonctions.h" dans main.c ou cela n'est pas nécessaire si je l'ai mis dans application.c?

    -
    Edité par ATGC 25 mars 2022 à 16:25:44

    • Partager sur Facebook
    • Partager sur Twitter
      25 mars 2022 à 16:54:24

      Hello,

      Le principe est le suivant: si 2.c utilise des fonctions se trouvant dans 1.c, alors 1.h doit être inclus dans 2.c

      A noter que si des fonctions de 1.c appellent des fonctions de 1.c, il n'est pas nécessaire que les fonctions appellées soient indiquées dans 1.h (sauf si elles sont immédiatement appelables par 2.c)

      -
      Edité par edgarjacobs 25 mars 2022 à 16:59:13

      • Partager sur Facebook
      • Partager sur Twitter

      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

        25 mars 2022 à 16:57:30

        edgarjacobs a écrit:

        Hello,

        Le principe est le suivant: si 2.c utilise des fonctions se trouvant dans 1.c, alors 1.h doit être inclus dans 2.c


        D'accord. Mais si on a un troisième fichier 3.c qui utilise des fonctions se trouvant seulement dans 2.c, doit-on aussi inclure 1.h dans 3.c?

        -
        Edité par ATGC 25 mars 2022 à 17:02:57

        • Partager sur Facebook
        • Partager sur Twitter
          25 mars 2022 à 17:12:23

          ATGC a écrit:

          (....) Mais si on a un troisième fichier 3.c qui utilise des fonctions se trouvant seulement dans 2.c, doit-on aussi inclure 1.h dans 3.c?

          Non, puisque 3.c n'appelle que des fonctions qui se trouvent dans 2.c. Il ne faut inclure que 2.h dans 3.c



          -
          Edité par edgarjacobs 25 mars 2022 à 17:15:40

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            25 mars 2022 à 17:14:57

            ATGC a écrit:

            Depuis main.c je n'utilise pas directement les fonctions de fonctions.c mais seulement les fonctions présentent dans application.c

            Je sais déjà que je devrai mettre un #include "application.h" dans le main.c

            C'est bien cela !

            ATGC a écrit:

            Dans le dossier application.c j'utilise des fonctions présentent dans le fichier fonctions.c   ...

            Est-ce que je dois faire un #include " fonctions.h" dans application.c? (comme on le ferait dans main.c)

            Oui, vu que tu utilise les fonction de fonction.c dans application.c

            ATGC a écrit:

            Depuis main.c je n'utilise pas directement les fonctions de fonctions.c   ...

            Est-ce que je dois aussi mettre un #include "fonctions.h" dans main.c ou cela n'est pas nécessaire si je l'ai mis dans application.c?

            Non, puisque tu n'utilise pas les fonctions de fonction.c dans main.c

            ATGC a écrit:

            Mais si on a un troisième fichier 3.c qui utilise des fonctions se trouvant seulement dans 2.c, doit-on aussi inclure 1.h dans 3.c?

            Non, tu utilises les fonctions de fichier2.c alors tu n'inclus que fichier2.h , tu n'utilise pas les fonctions de fichier1c alors pas d'include fichier1.h







            • Partager sur Facebook
            • Partager sur Twitter
            ...
              25 mars 2022 à 17:18:42

              Est-ce que tu fais des compilations séparées et le link à la fin?
              Une bonne pratique est de protéger les header de définitions multiples.
              Exemple
              Dans un fichier tata.h:
              #ifndef TATA_H
              #define TATA_H
                 ... texte du header
              #endif || TATA_H
              Comme ça si tu le mets à un endroit non approprié, tu n'auras pas de duplication de définitions, etc.
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

                25 mars 2022 à 17:32:39

                Donc on est d'accord. Pour être sûrs qu'on se soit bien compris.

                Quand un fichier 3.c utilise seulement indirectement des fonctions de 1.c, il ne faut pas inclure le 1.h dans 3.c.

                -
                Edité par ATGC 25 mars 2022 à 17:42:12

                • Partager sur Facebook
                • Partager sur Twitter
                  25 mars 2022 à 17:44:05

                  Si 3.c ne se réfère à rien de 1.c directement, c'est en effet inutile d'inclure 1.h dans 3.c

                  Un programme / fonction n'a besoin de connaître que ce qu'il utilise directement.

                  -
                  Edité par PierrotLeFou 25 mars 2022 à 17:46:33

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Le Tout est souvent plus grand que la somme de ses parties.

                    25 mars 2022 à 17:45:38

                    PierrotLeFou a écrit:

                    Si 3.c ne se réfère à rien de 1.c directement, c'est en effet inutile d'inclure 1.h dans 3.c


                    D'accord. Merci a tous pour votre aide.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      25 mars 2022 à 19:00:31

                      ATGC a écrit:

                      Quand un fichier 3.c utilise seulement indirectement des fonctions de 1.c, il ne faut pas inclure le 1.h dans 3.c.

                      3.c n'a pas besoin de 1.h, il n'appelle pas les fonctions se trouvant dans 1.c, même indirectement. Dans l'exemple, c'est 2.c qui appelle les fonctions de 1.c

                      D'ailleurs, lorsque 3.c appelle une fonction de 2.c, il se moque pas mal de ce qui se passe dans la foncton appellée, pour 3.c , c'est le résultat qui compte. C'est comme toi quand tu appelles printf(), tu t'en balances de savoir comment elle fait le job ni quelles fonctions elle appelle, pour toi c'est le résultat qui compte.

                      -
                      Edité par edgarjacobs 25 mars 2022 à 19:28:55

                      • Partager sur Facebook
                      • Partager sur Twitter

                      On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                      fonctions dans une fonction, et headers

                      × 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