реклама на сайте
подробности

 
 
> инкапсуляция в С, как?
Dubov
сообщение Apr 18 2014, 12:01
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052



Хочется писать красивый и правильный код.

Сейчас активно использую глобальные переменные и типа, если надо чтобы один модуль записывал данные, а другой их читал, то объявляю буфер как
extern buf[256];

Вобщем понимаю что не комильфо всё это. Но иные варианты сами в голову не приходят, прошу помочь.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
_Pasha
сообщение Apr 19 2014, 04:05
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Я тоже без особой нужды ничего не открываю. Доступ извне к массиву, объявленному в модуле - через функцию. Это не засоряет пространство имен внутри модуля.
Хоть 100500 одинаково названных queue, но определенных в разных модулях.
Go to the top of the page
 
+Quote Post
=AK=
сообщение Apr 19 2014, 04:34
Сообщение #3


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(_Pasha @ Apr 19 2014, 13:35) *
Доступ извне к массиву, объявленному в модуле - через функцию. Это не засоряет пространство имен внутри модуля. Хоть 100500 одинаково названных queue, но определенных в разных модулях.

Такой подход имеет право на существование, однако у него все же есть два недостатка:
- Пространство имен функций все-таки засоряется. Не получится иметь 100500 функций init();
- На вызов функции и возврат из нее тратится время и память кода. Напрямую с переменной работать эффективнее.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Apr 19 2014, 09:32
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(=AK= @ Apr 19 2014, 07:34) *
Такой подход имеет право на существование, однако у него все же есть два недостатка:
- Пространство имен функций все-таки засоряется. Не получится иметь 100500 функций init();
- На вызов функции и возврат из нее тратится время и память кода. Напрямую с переменной работать эффективнее.

Со временем устаканилось две вещи (как ответ на "два недостатка"):
1. Там, где надо 100500 ИНИТов делать - это решается через хэндлы. Как говорят военные, безобразно, зато единообразно.
Код
struct _handle
{
  void (*init)(void);
  void (*done)(void);
};

2. Там, где требуется оченно зашкаливающая эффективность, - там нет таких объемов данных и все сосредоточено в пределах одного модуля.
Это все фигня, потому что С++ все-таки дает неквадратные колеса. Если человеку аж чешется ООП, то для чего этим страдать на Си? На Си даже try - catch можно делать, ну и?
На GCC можно даже частично RTTI на макросах делать. Но к чему?


Сообщение отредактировал _Pasha - Apr 19 2014, 09:38
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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   Цитата(Dubov @ Apr 18 2014, 16:01) Хочетс...   Apr 18 2014, 16:33
|- - Сергей Борщ   Цитата(Xenia @ Apr 18 2014, 19:33) Если н...   Apr 18 2014, 18:54
||- - Xenia   Цитата(Сергей Борщ @ Apr 18 2014, 22:54) ...   Apr 18 2014, 22:13
||- - Сергей Борщ   Цитата(Xenia @ Apr 19 2014, 01:13) Именно...   Apr 18 2014, 23:36
||- - 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
- - 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:38
Рейтинг@Mail.ru


Страница сгенерированна за 0.01402 секунд с 7
ELECTRONIX ©2004-2016