Wat definieert een ondoorzichtig type in C, en wanneer zijn ze nodig en/of nuttig?

Ik heb het concept van ‘ondoorzichtige typen’ een beetje zien rondgooien, maar ik heb echt geen beknopt antwoord gevonden over wat een ondoorzichtig type in C definieert en, nog belangrijker, welke problemen ze ons in staat stellen op te lossen met hun bestaan . Bedankt


Antwoord 1, autoriteit 100%

Het wordt het meest gebruikt voor bibliotheekdoeleinden. Het belangrijkste principe achter Opaque type in c is om gegevens te gebruiken via de aanwijzer om de implementatie van gegevensverwerking te verbergen. Aangezien de implementatie verborgen is, kunt u de bibliotheek wijzigen zonder een programma dat ervan afhankelijk is opnieuw te compileren (als de interface wordt gerespecteerd)

bijvoorbeeld:
versie 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(..) { ... }

versie 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(..) { ... }

Van de kant van het programma is er niets veranderd! en zoals eerder gezegd, het is niet nodig om elk afzonderlijk programma opnieuw te compileren dat erop vertrouwt.


Antwoord 2, autoriteit 38%

Naar mijn idee zijn ondoorzichtige typen diegene waarmee je een handvat (dwz een aanwijzer) naar een structuur kunt houden, maar de inhoud niet rechtstreeks kunt wijzigen of bekijken (als je dat al mag, doe je dat via helper functies die de interne structuur begrijpen).

Ondoorzichtige typen zijn gedeeltelijk een manier om C meer objectgeoriënteerd te maken. Ze maken inkapseling mogelijk, zodat de interne details van een type kunnen veranderen – of anders kunnen worden geïmplementeerd in verschillende platforms/situaties – zonder dat de code die het gebruikt hoeft te veranderen.


Antwoord 3, autoriteit 22%

Een ondoorzichtig type is een type dat in API’s wordt weergegeven via een aanwijzer, maar nooit concreet wordt gedefinieerd.

Other episodes