LINUX.ORG.RU

Неполные типы в Си: typedef struct t* T или typedef struct t T?

 ,


0

1

Как вы задаёте синонимы для неполных типов? Считаете ли вы, что это вкусовщина? Сам для себя ещё не решил, поэтому спрашиваю советов мудрых. С одной стороны кто-то, использующий некую нашу библиотеку с неполным типом, должен иметь дело именно с абстрактным объектом, а не указателем на этот объект. К тому же в недрах самой библиотеки мы можем не пользоваться синонимом, потому что там скрывать нечего и не от кого, всё напротив должно быть чётко и понятно. Но с другой стороны не сразу понятно, что наш абстрактный тип — указатель, и юзер может накосячить с присваиванием. Какой точки зрения придерживаетесь?


Ответ на: комментарий от i-rinat

Тоже не понимаю этого. Убивает всю логику объявления. Да и суффиксы типа — фу же.

PamidoR
() автор топика
Ответ на: комментарий от i-rinat

Что-то сомневаюсь, что TPtr obj экономнее и понятнее, чем T *obj.

экономнее в каком смысле?

например, в libxml такая схема используется, вполне понятная, на мой взгляд.

Novel ★★★★
()

Когда не нужен opaque pointer, использую просто typedef struct T { ... };

maverik ★★
()
Ответ на: комментарий от Novel

экономнее в каком смысле?

Я встречал аргументацию к краткости. Некоторые люди не любят указатели, им их проще спрятать за typedef'ом. Нужно как-то обосновывать эти дополнительные конструкции, и их объясняют краткостью.

вполне понятная, на мой взгляд.

Вопрос личных предпочтений. Если тип — структура, это фактически приглашение заглянуть внутрь. Если тип — некий typedef, это больше похоже на «не трогай мои внутренности, для всего, что тебе надо, есть функции или макросы».

i-rinat ★★★★★
()
Ответ на: комментарий от PamidoR

В смысле?

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

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

Если тип — некий typedef, это больше похоже на «не трогай мои внутренности, для всего, что тебе надо, есть функции или макросы».

ну так это же и есть самый удобный публичный интерфейс, если речь идет о либе.

Novel ★★★★
()
Ответ на: комментарий от Novel

Мне нравится, когда не нужные мне детали прячутся в typedef, но указатели считаю нужными мне деталями. Поэтому typedef struct t T — хорошо, а typedef T *TPtr — плохо. IMO.

i-rinat ★★★★★
()

typedef указателя это фу

quest ★★★★
()

Не навязывай реализацию ссылок. А если пользователь захочет использовать твою библиотеку в C++11 с умными указателями?

AlexVR ★★★★★
()

Сам тоже в конце концов пришёл к выводу, что не надо тайпдефить указатели. Всем спасибо за ответы.

PamidoR
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.