Подтвердить что ты не робот

Что определяет непрозрачный тип в C, а когда они необходимы и/или полезны?

Я видел концепцию "непрозрачных типов", брошенных вокруг, но я действительно не нашел краткий ответ о том, что определяет непрозрачный тип на C, и что более важно, какие проблемы они позволяют нам решать с их существованием, Благодаря

4b9b3361

Ответ 1

Это наиболее часто используется для целей библиотеки. Основным принципом типа Opaque в c является использование данных, хотя его указатель, чтобы скрыть реализацию обработки данных. Поскольку реализация скрыта, вы можете изменить библиотеку, не перекомпилируя какую-либо программу, зависящую от нее (если интерфейс соблюден)

например: версия 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(..) { ... }

версия 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(..) { ... }

С вашей стороны программы ничего не изменилось! и, как говорилось ранее, нет необходимости перекомпилировать каждую отдельную программу, которая полагается на нее.

Ответ 2

В моем понимании непрозрачными типами являются те, которые позволяют удерживать дескриптор (т.е. указатель) в структуре, но не изменять или просматривать его содержимое напрямую (если вам вообще разрешено, вы делаете это через помощник функции, которые понимают внутреннюю структуру).

Непрозрачные типы - это, в частности, способ сделать C более объектно-ориентированным. Они позволяют инкапсулировать, так что внутренние детали типа могут меняться - или быть реализованы по-разному в разных платформах/ситуациях - без использования кода, который его использует.

Ответ 3

Непрозрачный тип - это тип, который отображается в API через указатель, но не определен конкретно.