next up previous contents index
Next: Structures de données chaînées Up: No Title Previous: Structures de données génériques

Interface d'une structure de données

         

Pour obtenir une organisation modulaire, on rassemblera les déclarations de ses fonctions publiques (exportées) dans un .h. Les déclarations des fonctions importées (c'est-à-dire d'autres fonctions que les fonctions publiques utilisent) figureront dans un autre .h.

Cela permet, après compilation, de fournir d'une part le .h comme interface d'exportation, et d'autre part le .o, comme module objet ; le .c, source de l'implémentation, n'a pas besoin d'être fourni.

Reprenons par exemple la structure de données << pile de void* >>, qui peut servir à implémenter des parcours en profondeur dans des arbres, et plus généralement dans des graphes. Son interface sera un fichier

/* stack.h */
#define MAX 100

typedef void *stack_data;

typedef struct {
  int height;
  stack_data content[MAX];
} stack;

void mk_empty_stack(stack *const s);
int is_empty_stack(const stack *p);
void push(const stack_data x, stack *p);
stack_data top(const stack *p);
stack_data pop(stack *p);

Un programme tree.c qui utilise une pile de pointeurs devra inclure dans son source cet en-tête stack.h et être lié à la compilation avec le module objet stack.o :

   

unix% gcc -c tree.c
unix% gcc -o tree tree.o stack.o

ou, en une seule commande :

unix% gcc tree.c stack.o -o tree


Jean-Philippe Chancelier
9/29/1998