Я не эксперт по низкоуровневым не объектно-ориентированным языкам программирования, и я нахожусь в процессе написания кода на C для проекта на работе. Я пытаюсь создать несколько приличных абстрактных типов данных для работы, и поиск в Google заставил меня осознать, что люди используют ADT на основе структур двумя способами. Некоторые люди определяют тип данных как структуру:
typedef struct adt {
//content here
} adt;
и представьте его миру в заголовочном файле.
Другие определяют тип данных как указатель на структуру:
// In .c file:
typedef struct adt_s {
//content here
} adt_s, *adt;
// In .h file:
typedef struct adt_s *adt;
Я понимаю, что этот подход позволяет вам вводить определение структуры, не давая внешнему миру никаких сведений о том, что находится внутри этой структуры, поэтому программисты могут только использовать функции, предоставленные в одном и том же заголовочном файле, для работы с этими данными типа.
Есть ли другие причины, чтобы выбирать над другими? Существует ли общее эмпирическое правило для случаев, когда ADT определяются как структуры и когда мы определяем их как указатели на структуры?