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 typeset
, dans la fonctionset__empty
. L’allocation destruct set
doit être dynamique et sa libération est effectuée dans la fonctionset__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 typestruct set
(qui est caché). - Le code utilisateur inclut uniquement le fichier en-tête
set.h
. Les fichiers en-têteset_sentinel.h
,set__dynamic.h
etset__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.
- Montrer que le prototype ne peut pas s’écrire:
void set__empty(struct set*)
- Modifier le prototype de
set__empty
dans le fichier en-têteset.h
. - Modifier le programme
affectation.c
, puis compiler. - 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 exempleaffectation.o
) va être utilisé pour obtenir l’exécutable de chaque réalisation.
Mise en œuvre sentinel
- Mettre à jour le source de la réalisation de
set
avec tableau à sentinelle. - Modifier les tests structurels, compiler et vérifier leur résultat.
- Compiler et exécuter l’exemple
affectation.c
.
Mise en œuvre dynamic
- Mettre à jour le source de la réalisation avec le tableau dynamique.
- Modifier les tests structurels, complier et vérifier leur résultat
- Compiler et exécuter l’exemple
affectation.c
.
Mise en œuvre link
- Mettre à jour le source de la réalisation avec la structure chaînée.
- Modifier les tests structurels, complier et vérifier leur resultat.
- Compiler et exécuter l’exemple
affectation.c
.