Plutôt que de commencer chaque fichier source par une liste de déclarations des objets définis dans d'autres fichiers sources, la communication entre les fichiers qui définissent un nom et ceux qui l'utilisent est assurée par des sources particuliers.
Il y a en effet deux sortes de fichiers sources : les fichiers d'en-tête, dont le nom se termine traditionnellement en .h et les fichiers de définitions, qui sont des .C. Les .h permettent de partager des déclarations entre plusieurs .C composant un même programme. Les .h doivent être inclus dans les .C au moyen de la directive suivante du préprocesseur, placée en tête du .C :
#include "declarations.h"
On notera que le nom du fichier d'en-tête est placé entre " ..." et non entre < ...>, qui est réservé aux en-têtes standards (comme iostream, cmath, etc).
Un fichier d'en-tête peut contenir les éléments suivants :
#include
)
struct complexe { double re, im; }; complexe complexe_mult(const complexe& x, const complexe& y); complexe complexe_add(const complexe& x, const complexe& y); complexe complexe_sub(const complexe& x, const complexe& y); complexe complexe_scal(double x, const complexe& y); void complexe_print(const complexe& x);
Le fichier-source contenant les définitions de ces fonctions commencera par les lignes suivantes :
# include "complexe.h" # include <iostream>
La différence essentielle entre un .h et un .C est que ce dernier peut contenir en outre des définitions d'objets.