ctypesopaque-pointersopaque-types

What defines an opaque type in C, and when are they necessary and/or useful?


I've seen the concept of 'opaque types' thrown around a bit but I really haven't found a succinct answer as to what defines an opaque type in C and more importantly what problems they allow us to solve with their existence. Thanks


Solution

  • It is the most generally used for library purpose. The main principe behind an Opaque type in C is to use data through its pointer in order to hide data handling implementation. Since the implementation is hidden, you can modify the library without recompiling any program which depend on it (if the interface is respected).

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

    From your program side, nothing changed! And as said previously, no need to recompile every single program which rely on it.