6.3. Compilation séparée en C/C++
La compilation séparée en C/C++ se fait au niveau du fichier. Il existe trois
grands types de fichiers sources en C/C++ :
les fichiers d'en-tête, qui contiennent toutes les déclarations
communes à plusieurs fichiers sources. Ce sont les fichiers d'en-têtes qui,
en séparant la déclaration de la définition des symboles du programme, permettent
de découper l'ensemble des sources en fichiers compilables séparément ;
les fichiers C, qui contiennent les définitions des symboles
en langage C ;
les fichiers C++, qui contiennent les définitions des symboles
en langage C++.
On utilise une extension différente pour les fichiers C et les fichiers C++
afin de les différencier. Les conventions utilisées dépendent du compilateur. Cependant, on peut
en général établir les règles suivantes :
les fichiers C ont l'extension .c ;
les fichiers C++ prennent l'extension .cc, ou
.C (majuscule) sur UNIX, ou .cpp sur les PC sous DOS ou Windows
(ces deux systèmes ne faisant pas la différence entre les majuscules et les minuscules dans leurs systèmes
de fichiers) ;
les fichiers d'en-tête ont l'extension
.h, parfois .hpp
(en-tête C++).
Les programmes modulaires C/C++ auront donc typiquement la structure suivante :
Note : Il faudra bien faire la distinction entre les fichiers sources compilés
séparément et les fichiers inclus par le préprocesseur. Ces derniers sont en effet compilés
avec les fichiers dans lesquels ils sont inclus. Il n'est donc pas recommandé d'inclure
des définitions de symboles dans les fichiers d'en-tête, car ces symboles risquent d'apparaître
dans plusieurs fichiers objets après la compilation. Cela provoque généralement une erreur
à l'édition de liens, parce que l'éditeur de liens ne peut pas déterminer quelle définition
prendre parmi celles qui se trouvent dans les différents fichiers objets.