next up previous contents index
Next: Fichiers d'en-tête Up: No Title Previous: Modularité

Compilation séparée

    

En ingénierie du logiciel, on cherche non seulement à produire des logiciels modulaires, mais aussi à réaliser leur production d'une façon modulaire. Typiquement, on ne doit pas être obligé de recompiler tout le programme quand une modification locale du source a été réalisée. La solution, qui existe depuis Fortran, est la compilation séparée .

En C, le fichier est à la fois l'unité de modularité et l'unité de compilation. Les définitions d'un programme peuvent être réparties entre plusieurs fichiers ; l'un d'eux contient la fonction main, et chacun peut être compilé séparément. Par la commande

 

unix% gcc -c fichier.c

le compilateur crée un fichier objet [*] fichier.o à partir d'un fichier source fichier.c. Les différents fichiers objets, les bibliothèques, et d'éventuels objets provenant d'autres langages, doivent ensuite être liées ensemble, pour créer le programme exécutable :

unix% gcc -o programme fichier1.o fichier2.o -lm

Bien que ce soit également une option du compilateur, cette opération de liaison des objets est en fait exécutée par un autre programme qui est un éditeur de liens [*].

Quand un programme (c'est-à-dire une liste de définitions) est réparti entre plusieurs fichiers, on ne peut plus exiger que chaque variable globale ou que chaque fonction soit définie dans le fichier où elle est utilisée. Il est pourtant nécessaire que le compilateur sache à quel type d'objet il a affaire quand il rencontre dans un fichier un nom qui n'y a pas été défini. On exige donc que dans chaque fichier, tout nom soit déclaré avant d'être utilisé. Ainsi, si un nom est défini dans un fichier f1.c et utilisé dans f2.c, ce dernier fichier doit comporter une déclaration de ce nom. Les déclarations ont la forme de définitions simplifiées.

La déclaration d'une fonction est obtenue à partir de sa définition en omettant les noms des paramètres et en remplaçant le corps { ...} de la fonction par un ; :  

double f(int, double[], double);

Une déclaration d'une variable globale a la forme d'une définition sans initialisation et doit être précédée du mot-clé extern :

extern int n;

Dans un programme, une fonction ou une variable globale doit être définie exactement une fois ; il peut y avoir un nombre quelconque de déclarations.


next up previous contents index
Next: Fichiers d'en-tête Up: No Title Previous: Modularité
Jean-Philippe Chancelier
9/29/1998