c - float - unsigned long
¿Qué define un tipo opaco en C, y cuándo son necesarios y/o útiles? (3)
En mi entender, los tipos opacos son aquellos que le permiten sostener un asa (es decir, un puntero) a una estructura, pero no modificar o ver sus contenidos directamente (si está permitido, lo hace a través de funciones auxiliares que entienden la estructura interna).
Los tipos opacos son, en parte, una forma de hacer que C sea más orientado a objetos. Permiten la encapsulación, de modo que los detalles internos de un tipo pueden cambiar, o implementarse de manera diferente en diferentes plataformas / situaciones, sin que tenga que cambiar el código que lo usa.
He visto un poco el concepto de "tipos opacos", pero realmente no he encontrado una respuesta concisa sobre qué define un tipo opaco en C y, lo que es más importante, qué problemas nos permiten resolver con su existencia. Gracias
Es el más utilizado generalmente para fines de la biblioteca. El principe principal detrás del tipo Opaque en c es usar datos a través de su puntero para ocultar la implementación del manejo de datos. Dado que la implementación está oculta, puede modificar la biblioteca sin volver a compilar ningún programa que dependa de él (si se respeta la interfaz)
Ejemplo: versión 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(..) { ... }
versión 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(..) { ... }
Desde su lado del programa, ¡nada ha cambiado! y como dije anteriormente, no hay necesidad de recompilar cada programa que depende de él.
Un tipo opaco es un tipo que está expuesto en las API a través de un puntero pero nunca definido de manera concreta.