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

 
 
> Коды завершения функции
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:14
Сообщение #4


Гуру
******

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



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

Читаемость - это сомнительно, скорее - наоборот: кода больше (лишнего причём), с чего бы читаемость-то тогда повысилась?
А вот монстроидальность такого кода неоспоримо выше!

Цитата(Forger @ Apr 25 2018, 21:11) *
exception - это не замена функции с параметром и последущими switch-case

Оно, насколько я помню, здорово отжирает стек. На МК да ещё с применением RTOS сиё - существенный минус.
Go to the top of the page
 
+Quote Post
Forger
сообщение Apr 25 2018, 18:21
Сообщение #5


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

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



Цитата(jcxz @ Apr 25 2018, 21:14) *
Читаемость - это сомнительно, скорее - наоборот: кода больше (лишнего причём), с чего бы читаемость-то тогда повысилась?

Вовсе нет, кода как раз меньше, читается он значительно легче. К такому коду комментарии вообще не требуются.
Кстати, мне крайне редко приходится писать комментарии. А, если комментарий все же требуется, то это признак того, что этот кусок кода потребует последующего допила

Цитата
А вот монстроидальность такого кода неоспоримо выше!
По ходу, вы не знаете о чем говорите. Либо мы ведем речь о разных в корне вещах.

Цитата
Оно, насколько я помню, здорово отжирает стек. На МК да ещё с применением RTOS сиё - существенный минус.

Все там нормально работает и жрется стек не так криминально, особенно если камень выбрать правильно.
Конечно же на маленьких камнях exception ни к чему. Он нужен лишь в больших проектах. Впрочем, это я уже указал. Вообше, к чему все это?

В голом С - некая эмуляция exception - бред, реально бред упёртого сишника, который всеми правдами и неправдами ищет способ оправдать свой страх и не желание изучать нормальный инструментарий (в частности C++)


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


Ally
******

Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050



Цитата(Forger @ Apr 25 2018, 21:21) *
В голом С - некая эмуляция exception - бред, реально бред упёртого сишника, который всеми правдами и неправдами ищет способ оправдать свой страх и не желание изучать нормальный инструментарий (в частности C++)

Справедливости ради там был бред упертого C++-ика
Он просто не знал как это правильно делается на C-и.
Кстати покажите ка свой код, а то не понятно на основании чего стоит прислушиваться к вашему мнению.
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, 20:47) Это к...   Apr 25 2018, 18:05
||- - Forger   Цитата(jcxz @ Apr 25 2018, 20:58) Ну да -...   Apr 25 2018, 18:11
|||- - 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
||- - 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 Текстовая версия Сейчас: 26th June 2025 - 07:42
Рейтинг@Mail.ru


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