next up previous contents
Next: Édition de liens avec Up: Point de vue pratique Previous: Point de vue pratique

Inclure les déclarations

Tout nom utilisé dans un fichier doit être dans la portée d'une déclaration. Pour réaliser cela, le plus simple sera d'inclure, grâce au préprocesseur, des fichiers de déclarations. De tels fichiers devront comporter des déclarations, mais, en principe, pas de définitions. A priori, pour une classe C donnée, on aura d'une part un fichier de d'entête des déclarations concernant cette classe qu'on appellera, par exemple, C.h , d'autre part le source du code correspondant dans un fichier C.C. Pour utiliser cette classe dans un autre fichier, on ajoutera en tête de ce fichier une ligne #include "C.h" et on appellera à l'édition de liens le module objet résultant de la compilation de C.C.

Il faut éviter que les fichiers d'entêtes contiennent autre chose que des déclarations :

fihier tete.h:
  class A{
    //...
  public:
    //...
  };
  A a;     //attention définition !!
  void erreur(){//...
  }        //attention définition !!
  
fichier A.C:
  /* code source pour la class A */
  #include "tete.h"
  //...
  
fichier f.C
  /* utilsateur de la class A */
  #include "tete.h
  //...
  A x;

Si CC -c a.C crée un module objet a.o, une compilation CC f.C a.o échouera à l'édition de liens car a et erreur auront été définis deux fois.

Il est important de noter que le fichier d'entête pourra contenir des définitions ou des déclarations de type (c'est l'objectif!), des déclarations de constantes (qui n'ont pas de lien externe par défaut), des déclarations de fonctions, des énumérations, des patrons (template), des macros du préprocesseur, et des définitions de fonctions en ligne. Notons aussi que les fonctions membres définies dans la classe sont ``inline'', ce qui permet de les mettre dans le fichier d'entête.

En principe, on aura donc pour chaque classe A, d'une part un fichier d'inclusion A.h, contenant toutes les déclarations des membres et utilitaires pour A, et sera inclus dans tous les sources utilisant la classe A, et un fichier source A.C, contenant toutes les définitions correspondant à A.h, l'objet correspondant ( A.o) étant utilisé par l'éditeur de liens.

Comme une déclaration de classe peut elle-même inclure un fichier d'inclusion de déclaration d'une autre classe, il faut éviter d'inclure plusieurs fois le même fichier. Pour cela, on peut utiliser les variables du préprocesseur, par exemple pour une classe chaine, le fichier de déclaration pourra avoir la forme:

#ifndef __CHAINE
#define __CHAINE
// les définitions de la classe chaine
#endif

next up previous contents
Next: Édition de liens avec Up: Point de vue pratique Previous: Point de vue pratique


Mon Oct 20 14:02:48 MET 1997