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

后端 未结 3 1990
你的背包
你的背包 2020-12-05 01:37

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

相关标签:
3条回答
  • 2020-12-05 02:11

    In my understanding, opaque types are those which allow you to hold a handle (i.e., a pointer) to an structure, but not modify or view its contents directly (if you are allowed to at all, you do so through helper functions which understand the internal structure).

    Opaque types are, in part, a way to make C more object-oriented. They allow encapsulation, so that the internal details of a type can change--or be implemented differently in different platforms/situations--without the code that uses it having to change.

    0 讨论(0)
  • 2020-12-05 02:27

    An opaque type is a type which is exposed in APIs via a pointer but never concretely defined.

    0 讨论(0)
  • 2020-12-05 02:33

    It is the most generally used for library purpose. The main principe behind Opaque type in c is to use data though 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.

    0 讨论(0)
提交回复
热议问题