Bonjour,
une petite question me taraude depuis un moment, et je n'ai pas réussi à la résoudre seul. Voilà ma question :
Dans un soucis de coder proprement, je souhaite coder des modules qui utilisent des structures, en cachant l'implémentation de ces structures.
Exemple, dans le module truc.h :
fichier truc.c :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 #ifndef _TRUC_H_ #define _TRUC_H_ typedef struct truc *truc; truc new_truc(int i,int j); void delete_truc(truc t); /* ... */ #endif
tout marche bien, mais impossible bien sûr d'utiliser l'allocation automatique, car on ne connait pas la taille d'une structure de type "truc". Cela complique désespérément tout, car il faut faire plein de malloc et de free, vérifier la mémoire, on se croirait en c++ (non ce n'est pas un troll, le C++ est, je trouve, bien plus compliqué que le C).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #include "truc.h" struct truc { int i,j; } void truc new_truc(int i,int j) { /* malloc */ } void delete_truc(truc t) { /* free */ } /* ... */
Y a-t-il un moyen de dire au compilateur que "truc" est une structure de la taille par exemple de deux int, mais sans que l'utilisateur du module ne puisse connaître ces champs ?
Ma question est peut-être futile, mais quelle est la meilleur approche pour cacher l'implémentation d'une structure à un utilisateur externe ? Est-il acceptable que celui-ci puisse modifier des champs sans passer par des fonctions propres aux modules (on s'éloigne du coup de l'approche objet, et on perd en évolutivité) ?
Merci pour vos réponses !
Partager