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

 
 
> Коды завершения функции
ViKo
сообщение Apr 24 2018, 05:26
Сообщение #1


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Иногда приходится придумывать некие коды, информирующие о той или иной ошибке при выходе из функции. К EXIT_SUCCESS и EXIT_FAILURE добавляются дополнительные. Не задавались ли вы целью привести коды в систему, чтобы пользоваться во всех случаях? Если да, поделитесь, пожалуйста идеями.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
arhiv6
сообщение Apr 25 2018, 10:43
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 633
Регистрация: 21-05-10
Из: Томск
Пользователь №: 57 423



А кто-нибудь использует для обработки ошибок CException или что-нибудь подобное? Вот ещё о нём: Обработка исключений на языке C.


--------------------
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 25 2018, 17:47
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(arhiv6 @ Apr 25 2018, 13:43) *
А кто-нибудь использует для обработки ошибок CException или что-нибудь подобное?

Поделюсь своим небольшим опытом ))

В толстых проектах - обязательно С++ и exсeption.
В маленьких и средних тоже С++, но без тяжелых exсeption (отъедает много места у маленьких камней).

Стараюсь всегда избегать функций (в C++ методов), которые помимо основной своей задачи еще и возвращают код ошибки.
Максимум - такая функция возвращает bool. Это дает возможность дать фунции осмысленное имя в соотв. с построением языка носителя - английского.
Это капитально улучшает читаемость кода, т.к. не нужно после возврата из такой функции проводить анализ возвращаемого кода ошибки с монстроподобным switch-case.

Например, нужно дождаться какого-то события (освобождения мьютекса), использую такую конструкцию:
Код
if (someSemaphore.isWaitingDone(100ms))
{
.....
}else...


Если нужно ждать бесконечно, то просто:
Код
someSemaphore.wait();


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

Чем проще входная и выходная часть функции, тем проще ее применять.
Кстати, насчет входной части: если в функцию передается более двух параметров, то такая функция требует перестроения.
В сложных случаях в функцию лучше передавать указатель (а в С++ ссылку) на экземпляр структуры, которую нужно заранее создать и вписать в нее нужные параметры.
Читаемость такого кода значительно выше, чем функция, в которую суют вагон разношерстных параметров и еще эта функция возвращает какой-то код ошибки.
В крайнем случае лучше сделать отдельную функцию для возврата кода ошибки в стиле getLastError, но это анахронический костыль, который лишь немного улучшает ситуацию.
Обычно, если функция может возвращать кучу разных ошибок, то это - неудачная функция и поэтому требует перепроектирования код модуля, где она применяется.
В случаях вынужденного использования чужого кода "as is", такие страшные функции лучше изолировать т. н. "обертками" (в С++ для этого отлично годится понятие класс).

Короче, сложные запутанные куски кода прячьте в простые и однозначные модули, узлы, классы и т. п.
Давайте сущностям (функции, объекты) полные и однозначные имена. Это навык в дальнейшем очень сильно пригодится.


Вы правильном мыслите в сторону exeption, но на голом C это - сто шагов назад, ближе к эпохе неолита )))
Правильный путь - изучать С++, а точнее грамотное проектирование на нем.
Сейчас остается все меньше и меньше кода на голом С, он явно умирает, равно как и умер в свое время ASM в чистом виде (я не говорю про небольшие вставки на ASM, где это жизненно необходимо в некоторых случаях).


зы. недавно в своем "любимом" Keil я перешел на С++11/14 (компилятор v6.10), кстати код получается меньше и быстрее
Можно сказать "пришлось" это сделать, т. к. С++03 (компилятор v5) сильно ограничивает применение чужого кода, который в большинстве своем требует как минимум C++11.


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
jcxz
сообщение Apr 25 2018, 18:05
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Forger @ Apr 25 2018, 20:47) *
Это капитально улучшает читаемость кода, т.к. не нужно после возврата из такой функции проводить анализ возвращаемого кода ошибки с монстроподобным switch-case.

Ну да - заменяя на монстроподобный механизм exception.

Цитата(Forger @ Apr 25 2018, 20:47) *
Сейчас остается все меньше и меньше кода на голом С, он явно умирает, равно как и умер в свое время ASM в чистом виде

Сейчас всё меньше и меньше народу пишет на си, всё больше быдлокодят на абдурине. Следуя Вашей логике - так и следует делать.
И все остальные утверждения - по меньшей мере спорны, если не полностью ложны.... laughing.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 25 2018, 18:11
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(jcxz @ Apr 25 2018, 20:58) *
Ну да - заменяя на монстроподобный механизм exception.

exception - это не замена функции с параметром и последущими switch-case (если функции вложенные, то вообще полный швах - кода много, да толку мало)
это вообще разные вещи и применять их следует в разных ситуациях
Есть неплохие статьи на эту тему: https://habr.com/post/264417/

Я лично использую exception только для аварийных (исключительных) ситуаций, а разбор ошибок реализую несколько иначе (см. предыдущий пост).
Причина этому у меня лично очень простая - не очень хорошая память и лень:
не могу в голове удерживать десятки невнятных функций с их кучей параметров и лень рыться в мануалах каждый раз как их использовать ))


Цитата
всё больше быдлокодят на абдурине. Следуя Вашей логике - так и следует делать.

Я смотрю, ардуинщики для вас - больная тема cranky.gif А быдлокодеры - это вообще отдельная каста "программеров". Приходится с ними часто работать? Тогда сочувствую ((( wacko.gif
Кстати, редкий ардуинщик понимает, что имеет дело с вполне полноценным С++ компилятором под AVR и потому строчит он по сути на голом С.




--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- ViKo   Коды завершения функции   Apr 24 2018, 05:26
- - twix   ...   Apr 24 2018, 05:37
- - arhiv6   Например, есть стандартные системные наборы кодов ...   Apr 24 2018, 05:46
- - ViKo   Хорошие коды. Но для встроенной программы избыточн...   Apr 24 2018, 05:59
- - Arlleex   Я обычно пишу модульно. То есть есть драйвер, допу...   Apr 24 2018, 06:36
- - ViKo   Меня немного смущает, что имя тип возвращаемого ко...   Apr 24 2018, 07:01
- - ViKo   Ну, вот такой набор прикинул, скомпилировал из раз...   Apr 24 2018, 09:47
|- - haker_fox   QUOTE (ViKo @ Apr 24 2018, 17:47) Ну, вот...   Apr 24 2018, 10:03
|- - ViKo   Цитата(haker_fox @ Apr 24 2018, 13:03) Вс...   Apr 24 2018, 10:12
|- - Kabdim   Цитата(haker_fox @ Apr 24 2018, 13:03) Кс...   Apr 24 2018, 10:54
|- - haker_fox   QUOTE (Kabdim @ Apr 24 2018, 18:54) Возвр...   Apr 24 2018, 14:10
- - one_eight_seven   ЦитатаНу, вот такой набор прикинул, скомпилировал ...   Apr 24 2018, 10:19
|- - ViKo   Цитата(one_eight_seven @ Apr 24 2018, 13...   Apr 24 2018, 10:25
- - one_eight_seven   ЦитатаЯ всегда делаю для себя. Но так, чтобы други...   Apr 24 2018, 10:30
- - ViKo   Э, если бы работа в группе заключалась в использов...   Apr 24 2018, 10:35
- - HardEgor   Цитата(ViKo @ Apr 24 2018, 12:26) Иногда ...   Apr 24 2018, 11:27
- - Kabdim   У вас в чипе 4Гб памяти? Но в общем, если не паков...   Apr 24 2018, 14:39
|- - jcxz   Цитата(Kabdim @ Apr 24 2018, 17:39) Наско...   Apr 24 2018, 16:28
|- - Kabdim   Цитата(jcxz @ Apr 24 2018, 19:28) Это в к...   Apr 25 2018, 07:37
- - k155la3   Цитата(ViKo @ Apr 24 2018, 08:26) Иногда ...   Apr 24 2018, 14:59
- - ViKo   Из функции можно возвратить структуру, в любом пра...   Apr 24 2018, 18:39
|- - jcxz   Цитата(ViKo @ Apr 24 2018, 21:39) Из функ...   Apr 24 2018, 18:44
|- - AlexandrY   Цитата(ViKo @ Apr 24 2018, 21:39) Из функ...   Apr 25 2018, 05:57
|- - ViKo   Цитата(AlexandrY @ Apr 25 2018, 08:57) Ща...   Apr 25 2018, 06:08
|- - AlexandrY   Цитата(ViKo @ Apr 25 2018, 09:08) Действи...   Apr 25 2018, 06:12
- - ViKo   А как насчет высказывания jcxz? ЦитатаТолько я все...   Apr 25 2018, 06:23
|- - jcxz   Цитата(ViKo @ Apr 25 2018, 09:23) Я думаю...   Apr 25 2018, 07:05
- - ViKo   Первая цитата не показывает, что размер структуры ...   Apr 25 2018, 07:33
|- - jcxz   Цитата(ViKo @ Apr 25 2018, 10:33) Первая ...   Apr 25 2018, 07:41
|- - ViKo   Цитата(jcxz @ Apr 25 2018, 10:41) Если не...   Apr 25 2018, 08:25
|- - jcxz   И откуда сиё взято? В "IAR C/C++ Development ...   Apr 25 2018, 08:38
- - haker_fox   QUOTE (Kabdim @ Apr 24 2018, 22:39) У вас...   Apr 25 2018, 07:38
|- - Kabdim   Цитата(haker_fox @ Apr 25 2018, 10:38) ОЗ...   Apr 25 2018, 07:58
- - ViKo   http://infocenter.arm.com/help/topic/com.a...0042F...   Apr 25 2018, 08:42
|- - jcxz   Цитата(ViKo @ Apr 25 2018, 11:42) Я, прав...   Apr 25 2018, 09:00
- - haker_fox   QUOTE (jcxz @ Apr 25 2018, 15:41) Если кт...   Apr 25 2018, 08:51
|- - Kabdim   Цитата(jcxz @ Apr 25 2018, 11:38) Не поня...   Apr 25 2018, 08:55
||- - haker_fox   QUOTE (Kabdim @ Apr 25 2018, 16:55) Тольк...   Apr 25 2018, 09:03
||- - jcxz   Цитата(haker_fox @ Apr 25 2018, 12:03) Я ...   Apr 25 2018, 09:06
|||- - haker_fox   QUOTE (jcxz @ Apr 25 2018, 17:06) ......в...   Apr 25 2018, 09:44
||- - Kabdim   Цитата(haker_fox @ Apr 25 2018, 12:03) Я ...   Apr 25 2018, 09:09
||- - AlexandrY   Цитата(haker_fox @ Apr 25 2018, 12:03) Я ...   Apr 25 2018, 09:32
|- - Сергей Борщ   QUOTE (haker_fox @ Apr 25 2018, 10:51) Во...   Apr 25 2018, 09:20
- - one_eight_seven   ЦитатаДумаю, что если есть ограничение, компилятор...   Apr 25 2018, 09:06
|- - jcxz   Цитата(one_eight_seven @ Apr 25 2018, 12...   Apr 25 2018, 09:12
- - one_eight_seven   ЦитатаВсё универсальное - неоптимально по определе...   Apr 25 2018, 09:14
|||- - jcxz   Цитата(Forger @ Apr 25 2018, 21:11) Я лич...   Apr 25 2018, 18:23
|||- - Forger   Цитата(jcxz @ Apr 25 2018, 21:23) Для ава...   Apr 25 2018, 18:29
||- - arhiv6   Цитата(jcxz @ Apr 26 2018, 01:05) Ну да -...   Apr 26 2018, 02:21
|- - jcxz   Цитата(Forger @ Apr 25 2018, 20:47) Читае...   Apr 25 2018, 18:14
|- - Forger   Цитата(jcxz @ Apr 25 2018, 21:14) Читаемо...   Apr 25 2018, 18:21
|- - AlexandrY   Цитата(Forger @ Apr 25 2018, 21:21) В гол...   Apr 25 2018, 18:32
||- - Forger   Цитата(AlexandrY @ Apr 25 2018, 21:32) Кс...   Apr 25 2018, 18:57
||- - AlexandrY   Цитата(Forger @ Apr 25 2018, 21:38) Уточн...   Apr 25 2018, 19:00
|||- - Forger   Цитата(AlexandrY @ Apr 25 2018, 22:00) Ку...   Apr 25 2018, 19:08
|||- - AlexandrY   Цитата(Forger @ Apr 25 2018, 22:08) ... н...   Apr 25 2018, 19:23
|||- - Forger   Цитата(AlexandrY @ Apr 25 2018, 22:23) А ...   Apr 25 2018, 19:30
|||- - AlexandrY   Цитата(Forger @ Apr 25 2018, 22:30) Напри...   Apr 25 2018, 19:51
|||- - Forger   Цитата(AlexandrY @ Apr 25 2018, 22:51) Вы...   Apr 25 2018, 20:13
|||- - AlexandrY   Цитата(Forger @ Apr 25 2018, 23:13) Я исп...   Apr 25 2018, 20:22
|||- - Forger   Возвращаясь к теме: http://softwaremaniacs.org/blo...   Apr 25 2018, 20:37
||- - jcxz   Цитата(Forger @ Apr 25 2018, 21:57) Очеви...   Apr 25 2018, 19:08
||- - Forger   Цитата(jcxz @ Apr 25 2018, 22:08) "Д...   Apr 25 2018, 19:17
|- - jcxz   Цитата(Forger @ Apr 25 2018, 21:21) Вовсе...   Apr 25 2018, 18:33
- - dimka76   В комплекте GCC в папке arm-none-eabi\include...   Apr 25 2018, 18:11
- - haker_fox   Коллеги, маленькое лирическое отступление) Прошу н...   Apr 26 2018, 02:33
- - juvf   не получиться универсального енума, глупости это. ...   Apr 28 2018, 18:19
|- - Forger   Цитата(juvf @ Apr 28 2018, 21:19) Чужой к...   Apr 28 2018, 21:50
- - haker_fox   QUOTE (juvf @ Apr 29 2018, 02:19) не полу...   May 2 2018, 04:13
|- - juvf   Цитата(haker_fox @ May 2 2018, 09:13) Как...   May 2 2018, 16:26
|- - haker_fox   QUOTE (juvf @ May 3 2018, 00:26) Чаще я о...   May 3 2018, 00:27
|- - AlexandrY   Цитата(haker_fox @ May 3 2018, 03:27) Пон...   May 3 2018, 05:52
||- - Forger   Цитата(AlexandrY @ May 3 2018, 08:52) ......   May 3 2018, 08:50
||- - AlexandrY   Цитата(Forger @ May 3 2018, 11:50) Поэтом...   May 3 2018, 10:04
||- - Forger   Цитата(AlexandrY @ May 3 2018, 13:04) Стр...   May 3 2018, 10:49
||- - AlexandrY   Цитата(Forger @ May 3 2018, 13:49) это но...   May 3 2018, 13:37
||- - Forger   Цитата(AlexandrY @ May 3 2018, 16:37) На ...   May 3 2018, 15:23
|- - juvf   Цитата(haker_fox @ May 3 2018, 05:27) Пон...   May 4 2018, 07:17
|- - Forger   Цитата(juvf @ May 4 2018, 10:17) У Alexan...   May 4 2018, 08:47
|- - juvf   Цитата(Forger @ May 4 2018, 13:47) остали...   May 4 2018, 09:14
|- - Forger   Цитата(juvf @ May 4 2018, 12:14) а я ушел...   May 4 2018, 09:54
- - ViKo   Я постарался дать обобщенные имена ошибкам. А как ...   May 2 2018, 06:45
- - ViKo   Кстати, в данное время я решил выдавать результаты...   May 3 2018, 03:02
- - ViKo   Можно даже скомбинировать тип устройства и тип оши...   May 3 2018, 05:28
- - Arlleex   ЦитатаЯ скажем везде где можно использую глобальны...   May 3 2018, 14:45
|- - AlexandrY   Цитата(Arlleex @ May 3 2018, 17:45) С рос...   May 3 2018, 17:46
- - Arlleex   ЦитатаЭто у вас весьма маленькое приложение. А я и...   May 3 2018, 19:22
|- - haker_fox   QUOTE (Arlleex @ May 4 2018, 03:22) А бло...   May 4 2018, 01:22
|- - AlexandrY   Цитата(Arlleex @ May 3 2018, 22:22) Истор...   May 4 2018, 07:55
- - AnatolyT   Пишу для м\к на чистом С, для приложений на п...   May 4 2018, 06:04
- - ViKo   Я - о своем. Все уже придумано до нас. https://ru....   May 4 2018, 08:57
2 страниц V   1 2 >


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

 


RSS Текстовая версия Сейчас: 20th June 2025 - 04:41
Рейтинг@Mail.ru


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