2013-11-21 2 views
1

Я искал некоторые библиотеки с открытым исходным кодом в некоторых местах. И я понял, какие библиотеки в основном представляют собой большой стек структур. Я видел несколько методов.Почему C письменных библиотек использует так много структур?

Почему C письменных библиотек использует столько структур? Какова основа этого? Это для меня было похоже на попытку имитировать объектную ориентацию, потому что быстрый поиск сказал мне, что каждая структура «создается» с помощью программы, чтобы сделать что-то, например, в некоторых средах рабочего стола для Linux, которые я видел что каждое окно является структурой в используемой графической библиотеке.

В любом случае, вопрос в том, что.

+2

Много раз это * * попытка имитировать ориентацию объекта.Это единственный механизм C, который объединяет разные типизированные данные, не превращаясь в чистые байты. – Jon

+6

Ну, структуры - хороший способ хранения связанных данных. – chris

+0

Одно слово: организация. –

ответ

2

Структуры - отличный способ организовать данные. И данные фундаментальна, как и Фред Брукс знал несколько десятилетий назад:

Покажите мне ваши блок-схемы и скрыть свои таблицы, и я буду продолжать быть озадачен. Покажите мне свои таблицы, и мне обычно не нужны ваши блокфорты ; они будут очевидны.

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

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

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

2

С ориентацией объекта или без него структура представляет собой полезный способ группировки совокупных данных в один символ. Вы можете скопировать структуру везде, где хотите, без необходимости выписывать все члены каждый раз, и это упрощает изменение структуры, если вам нужно.

Он также упрощает обращение к некоторым членам, используя арифметику указателя, если вы осторожны (см. sockaddr).

Те же аргументы, что и в случае с массивами.

Проще говоря, нет причин не использовать конструкции.

2

Структуры полезны при извлечении данных с помощью указателя. Поскольку одного указателя достаточно для полной совокупности данных в структуре.

1

Во-первых, он держит API в чистоте. Вместо того, чтобы передавать N отдельных аргументов функции, вы передаете один аргумент, содержащий N членов.

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

Смежные вопросы