Это неполные или непрозрачные типы, и они полезны, когда интерфейс библиотеки работает только с указателями на эти типы.Вам не нужно заполнять все детали того, что находится в структурах, поэтому никакой код вне библиотеки никогда не сможет получить доступ к данным в структуре (законно).Код внутри библиотеки имеет закрытый заголовок, который предоставляет подробные сведения о том, что находится в структурах, поэтому библиотека действительно может работать с содержимым, но эта деталь скрыта от потребителей библиотеки.
Incompleteтипы обеспечивают намного лучшую безопасность типов, чем другая альтернатива, которая иногда используется, а именно пустые указатели.Слишком легко запутаться, когда есть несколько различных типов, представленных как 'void *
'.С неполными типами вы можете правильно различать разные типы, но все же не раскрывать детали того, как они реализованы.