Programmation C-C++/Compilation séparée en C/C++

Cours de C/C++
^
Modularité et compilation
Pourquoi faire une programmation modulaire ?
Les différentes phases du processus de génération des exécutables
Compilation séparée en C/C++
Syntaxe des outils de compilation
Problèmes syntaxiques relatifs à la compilation séparée

Livre original de C. Casteyde

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 :

 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.