c / expert
Snippet
Kapselung via opaker Pointer
Opake Pointer (oder 'PIMPL' in C) verbergen die Implementierungsdetails eines Structs vor dem Benutzer. Durch die Bereitstellung nur einer Vorwärtsdeklaration im Header verhindert der Compiler, dass Benutzer auf interne Felder zugreifen oder die Größe des Structs annehmen, was eine stabile binäre Schnittstelle (ABI) gewährleistet.
snippet.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// In public header: session.htypedef struct Session Session;Session* session_create(int id);void session_destroy(Session* s);// In private implementation: session.c#include <stdlib.h>struct Session {int id;char internal_key[32];};Session* session_create(int id) {Session* s = malloc(sizeof(struct Session));if (s) s->id = id;return s;}void session_destroy(Session* s) { free(s); }
Erklärung
1
typedef struct Session Session;
Erstellt einen Alias für einen unvollständigen Struct-Typ, der in externem Code nur über Pointer nutzbar ist.
2
struct Session { ... };
Die vollständige Definition ist in der .c-Datei verborgen, was den direkten Zugriff auf 'internal_key' durch Bibliotheksnutzer verhindert.
3
Session* s = malloc(sizeof(struct Session));
Die Bibliothek verwaltet die Speicherallokation, da nur die Bibliothek die tatsächliche Größe des Structs kennt.