Когда мне следует typedef struct вместо указателя на структуру?

Я не эксперт по низкоуровневым не объектно-ориентированным языкам программирования, и я сейчас пишу код на C для проект в работе. Я пытаюсь создать несколько приличных абстрактных типов данных для работы, и поиск в Google заставил меня понять, что люди используют ADT на основе структур двумя способами. Некоторые люди определяют тип данных как struct:

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 определяется как структуры, а когда мы определяем их как указатели на структуры?

8
задан Useless 15 February 2012 в 16:11
поделиться