J’ai déjà vu un peu le concept de «types opaques», mais je n’ai pas vraiment trouvé de réponse succincte sur ce qui définit un type opaque en C et, plus important encore, sur les problèmes qu’ils permettent de résoudre avec leur existence. Merci
C’est le plus généralement utilisé à des fins de bibliothèque. Le principe de base du type Opaque dans c consiste à utiliser des données à l’aide de leur pointeur afin de masquer la mise en œuvre du traitement des données. Puisque l’implémentation est masquée, vous pouvez modifier la bibliothèque sans recomstackr les programmes qui en dépendent (si l’interface est respectée).
par exemple: version 1:
// header file struct s; int s_init(struct s **x); int s_f(struct s *x); int s_g(struct s *x); // source file struct s { int x; } int s_init(struct s **x) { *x = malloc(...); } int s_f(..) { ... } int s_g(..) { ... }
version 2
// header file struct s; int s_init(struct s **x); int s_f(struct s *x); int s_g(struct s *x); // source file struct s { int y; int x; } int s_init(struct s **x) { *x = malloc(...); } int s_f(..) { ... } int s_g(..) { ... }
Du côté de votre programme, rien n’a changé! et comme dit précédemment, nul besoin de recomstackr chaque programme qui en dépend.
Selon ma compréhension, les types opaques sont ceux qui vous permettent de tenir une poignée (un pointeur) sur une structure, sans modifier ni afficher directement son contenu (si vous y êtes autorisé, vous le faites par le biais de fonctions la structure interne).
Les types opaques sont, en partie, un moyen de rendre le C plus orienté object. Ils permettent l’encapsulation, de sorte que les détails internes d’un type puissent changer – ou être implémentés différemment selon les plateformes / situations, sans que le code qui l’utilise ne doive changer.
Un type opaque est un type exposé dans les API via un pointeur, mais jamais défini de manière concrète.