Allocation dynamique de `struct set`

Pour effectuer l’affectation d’une structure, le compilateur doit connaître la définition de cette structure. Pour rendre l’affectation impossible, la définition de struct set ne doit pas apparaître dans les fichiers en-tête inclus dans le code utilisateur.

Conséquences:

  • L’allocation mémoire de struct set ne peut plus être faite par l’utilisateur et doit donc être réalisée par les fonctions du type set, dans la fonction set__empty. L’allocation de struct set doit être dynamique et sa libération est effectuée dans la fonction set__free.
  • Le code utilisateur ne manipule que des pointeurs sur struct set. Il n’est plus possible d’affecter une structure à une autre: l’opérateur = n’est plus défini sur le type struct set (qui est caché).
  • Le code utilisateur inclut uniquement le fichier en-tête set.h. Les fichiers en-tête set_sentinel.h, set__dynamic.h et set__link.h ne sont plus nécessaires au code utilisateur. Ils restent néanmoins nécessaires aux tests structurels.

Prototype de set__empty

Le prototype de la fonction set__empty doit être modifié. Il doit maintenant retourner un pointeur.

  1. Montrer que le prototype ne peut pas s’écrire: void set__empty(struct set*)
  2. Modifier le prototype de set__empty dans le fichier en-tête set.h.
  3. Modifier le programme affectation.c, puis compiler.
  4. Pourquoi n’est-il plus nécessaire de recompiler le fichier affectation.c pour chaque réalisation?

Conséquence: le même fichier objet .o (par exemple affectation.o) va être utilisé pour obtenir l’exécutable de chaque réalisation.

Mise en œuvre sentinel

  1. Mettre à jour le source de la réalisation de set avec tableau à sentinelle.
  2. Modifier les tests structurels, compiler et vérifier leur résultat.
  3. Compiler et exécuter l’exemple affectation.c.

Mise en œuvre dynamic

  1. Mettre à jour le source de la réalisation avec le tableau dynamique.
  2. Modifier les tests structurels, complier et vérifier leur résultat
  3. Compiler et exécuter l’exemple affectation.c.
  1. Mettre à jour le source de la réalisation avec la structure chaînée.
  2. Modifier les tests structurels, complier et vérifier leur resultat.
  3. Compiler et exécuter l’exemple affectation.c.