|
инкапсуляция в С, как? |
|
|
|
 |
Ответов
|
Apr 18 2014, 16:33
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(Dubov @ Apr 18 2014, 16:01)  Хочется писать красивый и правильный код. Сейчас активно использую глобальные переменные и типа, если надо чтобы один модуль записывал данные, а другой их читал, то объявляю буфер как extern buf[256]; Если надо красиво и правильно, но все объявления extern-объектов следует делать в отдельном хидере. Например, в global.h куда вписать все extern-определения. А чтобы и сами глобальные объекты не расползлись по разным модулям, то их желательно тоже поместить в отдельную корзину. Например, собрать их всех в модуле global.c или завести себе правило объявлять глобальные переменные только в модуле main.c (тогда и global.h можно обозвать main.h). А в самих сишных модулях слово extern никогда (!) не должно встречаться, а допустимо лишь включать #include "global.h" или #include "main.h" Тогда уж вы точно избежите любых ошибок, связанных с недоопределением глобальных переменных.
|
|
|
|
|
Apr 18 2014, 23:36
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(Xenia @ Apr 19 2014, 01:13)  Именно так. Определения, которые используются более чем одним модулем, должны не повторяться в каждом модуле, а быть однократно определены в хидере. А вот и нет. Во-первых не определения, а объявления. А во-вторых переменные модуля А и его функции, которые используются другими модулями, должны быть объявлены в его заголовочном файле A.h и именно этот заголовочный файл должен включаться в тот и только в тот исходник/заголовочный файл, где эти объявления используются. А валить все в одну кучу, в один глобальный файл - это кошмар для сопровождения проекта.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
Сообщений в этой теме
Dubov инкапсуляция в С Apr 18 2014, 12:01 aaarrr Цитата(Dubov @ Apr 18 2014, 16:01) extern... Apr 18 2014, 12:06 Dubov Цитата(aaarrr @ Apr 18 2014, 16:06) Снача... Apr 18 2014, 12:17  aaarrr Цитата(Dubov @ Apr 18 2014, 16:17) ну и с... Apr 18 2014, 12:21 Swup Вы ведь еще можете его передавать свой массив, как... Apr 18 2014, 12:31 insane_person Это увеличивает связность кода и соответственно ус... Apr 18 2014, 15:40    Xenia Цитата(Сергей Борщ @ Apr 19 2014, 03:36) ... Apr 19 2014, 03:39     Сергей Борщ Цитата(Xenia @ Apr 19 2014, 06:39) А хиде... Apr 19 2014, 07:31 Tiro Цитата(Xenia @ Apr 18 2014, 19:33) Если н... Apr 18 2014, 22:25 =AK= Цитата(Dubov @ Apr 18 2014, 21:31) Хочетс... Apr 19 2014, 04:01 _Pasha Я тоже без особой нужды ничего не открываю. Доступ... Apr 19 2014, 04:05 =AK= Цитата(_Pasha @ Apr 19 2014, 13:35) Досту... Apr 19 2014, 04:34  _Pasha Цитата(=AK= @ Apr 19 2014, 07:34) Такой п... Apr 19 2014, 09:32 andrewlekar ЦитатаЗачем, ну объясните мне, зачем делать эту об... Apr 20 2014, 15:50 Dubov Цитата(andrewlekar @ Apr 20 2014, 19:50) ... Apr 22 2014, 05:32 andrewlekar Приложение может строиться разными способами. Ваша... Apr 22 2014, 07:58 thodnev Инкапсуляция является одним из подходов к ООП, а С... May 8 2014, 16:48
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|