Question sur HEADERS

asstel Messages postés 54 Statut Membre -  
asstel Messages postés 54 Statut Membre -
Bonjour,
j'ai 2 fichiers "headers"
l'un des deux a besoin de l'autre

j'ai fait :
#ifndef .... 
#define ....
//prototypes
#endif

au niveau de chaque .h
pour unclure l'autre header esq il suffit d'ajouter
#include "autre_Header.h"
au header.c
ou bien autre chose?
comment faire s'il vous plait?

2 réponses

  1. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
     
    Salut asstel,

    En général, une pratique recommandée est :

    - de ne mettre dans les .h que les déclarations : des fonctions, des structures, des variables globales (si elles sont vraiment nécessaires) seulement déclarées avec le mot clef "extern",

    - et de mettre dans les fichiers .c le reste, c'est à dire notamment : les implémentations des fonctions, les définitions et initialisations de variables (notamment des variables "extern" déclarées dans le .h) et de structures.

    Le C étant particulièrement laxiste, tu peux faire autrement, mais ce n'est pas recommandé.

    Je trouve que le document suivant http://www.umich.edu/~eecs381/handouts/CHeaderFileGuidelines.pdf produit par un professeur de l'Université du Michigan est assez complet et bien fait et contient un bon résumé des bonnes pratiques que les programmeurs C s'attendent à retrouver en consultant un code source raisonnablement bien construit.

    Dal
    1
    1. asstel
       
      Merci dal pour votre aide
      Je mets dans .h que les prototypes
      mais j'avais une structure dans autre_header.c et header.c a besoin de cette structure malgre que j ai fait include mais le meme problem qui se pose donc j ai copie ma structure dans header.c aussi
      esq c logique se qe j ai fais ou bien ...?!
      0
    2. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      Non, ne "copie", la duplication est à proscrire.

      Si une structure a vocation à être utilisée par plusieurs fichiers .c, (disons une structure "personne" pouvant contenir nom, prenom, adresse, etc. - pour une application de gestion de personnel), tu peux créer un .h pour la déclarer (et y déclarer toutes autres déclarations destinées à être utilisées dans plusieurs modules .c - tu n'as pas nécessairement à faire en sorte qu'un fichier .h corresponde à un fichier .c).

      par exemple, tu mets dans un fichier
      pers-common.h
      :

      #ifndef PERS_COMMON_H
      #define PERS_COMMON_H
      
      #include <stdio.h>
      
      #define PERS_COMMON_MAXCHAR BUFSIZ
      
      struct personne {
          char nom[PERS_COMMON_MAXCHAR];
          char prenom[PERS_COMMON_MAXCHAR];
          char adresse[PERS_COMMON_MAXCHAR];
      };                                                                              
          
      #endif
      


      Tu inclueras ce .h dans chaque .c qui aura besoin de définir une struct ainsi déclarée.

      Par exemple, dans main.c :

      #include <stdio.h>
      #include <string.h>
      
      #include "pers-common.h"
                                                                                      
      int main(void)
      {
          struct personne employe;
          strcpy(employe.nom, "DURAND");
          strcpy(employe.prenom, "Toto");
          strcpy(employe.adresse, "12, rue de la Blague, 75000 Paris");
      
          return 0;
      }
      


      Mais aussi dans un autre module, par exemple fiches_paie.c.

      Cet exemple illustre le partage de la déclaration d'une structure dans un .h, pouvant être utilisée et définie dans plusieurs fichiers .c.


      Dal
      0
    3. asstel Messages postés 54 Statut Membre
       
      ah donc peut on declarer comme un prototype d'une structure par exemple je fais que
      #typedef struct personne employe;

      ou
      personne empolye;

      dans un .h et cela m'evitra de la reecrire !
      merciii :D
      0
    4. asstel Messages postés 54 Statut Membre
       
      autre question svp peut on creer un .h pour plusieurs .c?
      0
    5. [Dal] Messages postés 6122 Date d'inscription   Statut Contributeur Dernière intervention   1 108
       
      En ce qui concerne les typedef, il y a des gens pour et des gens contre.

      Cependant, si tu décides de les déclarer, leur place est dans un .h, effectivement. Tu pourras en faire usage pour définir une variable dans un .c au moyen de l'alias typedef ainsi déclaré, sous réserve d'inclure le .h qui le contient dans ce .c.

      La définition de variable avec ton typedef serait
      employe un_employe;
      et pas ce que tu as écrit. Cette définition, donc, irait dans un .c (celui qui l'utiise) et pas dans un .h.

      Oui, un .h peut servir à plusieurs .c. C'est l'objet de mon exemple que de l'illustrer.


      Dal
      0
  2. asstel Messages postés 54 Statut Membre
     
    si cet header a besoin d'une structure qui se trouve dans l'autre header
    esq c le meme principe qu'une procedure
    ou bien il faut la reecrire dans cet header aussi?
    mercii :D
    0