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

 
 
> Коды завершения функции
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
Ответов
haker_fox
сообщение May 2 2018, 04:13
Сообщение #2


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (juvf @ Apr 29 2018, 02:19) *
не получиться универсального енума, глупости это. ИМХО. Тем более 8 или всего 4 значения. У каждой функции своя задача и свои возвращаемые значения.
мой черновик функции включения вращения антенны

Как вы передаёте код ошибки при вложенном вызове функций? Т.е. снизу на верх?
QUOTE (juvf @ Apr 29 2018, 02:19) *
Слышали такое слово "говнокод"?

Ну конечно слышал, как и множество других мерзких слов. Тут вопрос в другом, позволить себе использовать это по отношению к другим, или нет?
QUOTE (juvf @ Apr 29 2018, 02:19) *
Чужой код - всегда гавно. Каким бы он ни был.

Я понял, что вы имеете в виду rolleyes.gif Мне такие намёки тоже делали. Не прямыми словами. Когда я парировал, что это мой собственный стиль написания кода, человек, оскорбивший моё творчество, сватил жёсткий "батхёрт", и начал меня учить, что стили в коде это совершенно другое. В общем его задача была обругать, а не понять. И ему мои объяснения (хотя он мне и не начальник) были совершенно не нужны. К слову, его код постоянно подвергается справедливой (на мой взгляд) критике. Не ругане, а критике. Поэтому делаю вывод (не только по этому случаю), тот кто умеет делать дело, других ругать не станет. Максимум - аккуратно посоветует, как можно по-другому. Ну, а возомнивший себя профессионалом, будет изрыгать огонь налево и направо, при этом тащась от творений себе подобных rolleyes.gif


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
juvf
сообщение May 2 2018, 16:26
Сообщение #3


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

Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045



Цитата(haker_fox @ May 2 2018, 09:13) *
Как вы передаёте код ошибки при вложенном вызове функций? Т.е. снизу на верх?
Чаще я ошибки обрабатываю на месте и мне не нужно их передавать выше. Если нужно выше передать, то делаю общий енум кодов ошибок для отдельного куста.
Go to the top of the page
 
+Quote Post
haker_fox
сообщение May 3 2018, 00:27
Сообщение #4


Познающий...
******

Группа: Свой
Сообщений: 2 963
Регистрация: 1-09-05
Из: г. Иркутск
Пользователь №: 8 125



QUOTE (juvf @ May 3 2018, 00:26) *
Чаще я ошибки обрабатываю на месте и мне не нужно их передавать выше. Если нужно выше передать, то делаю общий енум кодов ошибок для отдельного куста.

Понятно! У вас тоже общий энум всё-таки не исключён rolleyes.gif
У меня была задача передавать коды ошибок "на верх" не только через иерархию функцию, но и устройств. Т.е., например, "железяка1"-"железяка2"-"комп".


--------------------
Выбор.
Go to the top of the page
 
+Quote Post
AlexandrY
сообщение May 3 2018, 05:52
Сообщение #5


Ally
******

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



Цитата(haker_fox @ May 3 2018, 03:27) *
Понятно! У вас тоже общий энум всё-таки не исключён rolleyes.gif
У меня была задача передавать коды ошибок "на верх" не только через иерархию функцию, но и устройств. Т.е., например, "железяка1"-"железяка2"-"комп".

Зачем вам передавать вверх?
Это как минимум выставляет дополнительные требования ко всем программным интерфейсам снизу вверх.
Сковывает рефакторинг. Увеличивает объем кодирования. Рассеивает точку внимания. Вызывает новые зависимости.
Т.е. в чем корневая причина?
Вас заставляют так делать, делаете библиотеки, корпоративный стандарт, используете IDE с ограниченными возможностями рефакторинга или что?

Я скажем везде где можно использую глобальные переменные и синглтоны. Очень удобно и лаконично получается.
Go to the top of the page
 
+Quote Post
Forger
сообщение May 3 2018, 08:50
Сообщение #6


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

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



Цитата(AlexandrY @ May 3 2018, 08:52) *
... везде где можно использую глобальные переменные ...

Это многое объясняет biggrin.gif

Цитата(ViKo @ May 3 2018, 06:02) *
Кстати, в данное время я решил выдавать результаты POST проверок бипами, пищалкой.

Наверно, есть смысл разделять ошибки на критические (аналог исключений в C++) и обычные, "рабочие".
Критические это те, которые не дают нормально работать приложению, т.е. аварийные.
Бипами, имхо, стоит афишировать критические ошибки (как на многих мат. платах компов).

А обычные ошибки лучше всего обрабатывать в коде именно в том месте, где производится вызов некой функции, которая возвращает ошибку.
В идеале нужно обрабатывать ВСЕ возможные ошибки, которые может возвратить некая функция. Т.е. предусмотреть поведение кода на ЛЮБУЮ ситуацию.
А передавать эту ошибку дальше не есть хорошо - это называется "скинуть ответственность", что всегда плохо заканчивается, зачастую создавая настолько редкие баги, что потом их ищут неделями.
Самый простой случай, когда код ошибки - возврат true/false, его очень просто обрабатывать (if ... else), читать и понимать такой код тоже очень просто.
Поэтому я тоже не понимаю таких вещей как "глобальные ошибки", универсальный набор ошибок и т. п. Сопровождать и отлаживать такой код - крайне неблагодарное занятие.
Как тут уже говорили комрады: универсальные решения - зло. Каждый кусок кода (модуль) должен делать именно то, что должен, и не более того.

Если же по необходимости используется сторонняя библиотека, то передавать возвращаемые ею ошибки дальше по коду - не есть хорошо. В последствии это принесет немало геморроя (см. выше).
Поэтому я лично предпочитаю "изолировать" внешние библиотеки от основного кода т. н. обертками (wrapper), в которых скрыта вся "черновая" работа по разгребанию результатов работы "неуклюже" написанной библиотеки.
А сам функционал (интерфейс) этой "обертки" урезать до минимума, оставляя самое необходимое и реальное важное.
При использовании исключений C++ можно "кидать" некоторые действительно важные исключения, но их обязательно нужно документировать, чтобы потом в коде правильно их "отлавливать".
Так же как аналог подобных критических исключений (как тут уже говорили выше) отлично годятся SVC вызовы. Их можно использовать на asm/c/c++.


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


Ally
******

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



Цитата(Forger @ May 3 2018, 11:50) *
Поэтому я лично предпочитаю "изолировать" внешние библиотеки от основного кода т. н. обертками (wrapper), в которых скрыта вся "черновая" работа по разгребанию результатов работы "неуклюже" написанной библиотеки.
А сам функционал (интерфейс) этой "обертки" урезать до минимума, оставляя самое необходимое и реальное важное.

Странная идея - добавить еще кода чтобы сделать код более понятным.
На самом деле эта изоляция - это наказание любителям плюсов вокруг которых все либы написаны на C.
Они вынуждены писать изоляцию чтобы скрестить ежа с ужом.
Go to the top of the page
 
+Quote Post
Forger
сообщение May 3 2018, 10:49
Сообщение #8


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

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



Цитата(AlexandrY @ May 3 2018, 13:04) *
Странная идея - добавить еще кода чтобы сделать код более понятным.

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

Цитата
На самом деле эта изоляция - это наказание любителям плюсов вокруг которых все либы написаны на C.

Плюсы тут ни при чем. Изолировать чужой говнокод можно даже на асм-е.
Можно даже изолировать чужой C++ говнокод на голом С, если в этом, конечно, есть особая нужда.
Однако, на плюсах (или другом аналогичном языке) грамотно проектировать проект намного проще и поэтому значительно удобнее в использовании и дальнейшем сопровождении кода.
Это вам скажет любой профи, который после ручной пилы освоил электро-лобзик, бензопилу и т.п. : ручную пилу он будет использовать лишь для мелких поделок и допилов.

Цитата
Они вынуждены писать изоляцию чтобы скрестить ежа с ужом.

В который раз прихожу к выводу, что вы не достаточно знакомы с предметом этого разговора и поэтому судите весьма поверхностно. Увы sad.gif
Но это вполне нормально - чего-то не знать или не уметь. Ведь это поправимо: нынче очень много полезной развивающей литературы, было бы желание wink.gif


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


Ally
******

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



Цитата(Forger @ May 3 2018, 13:49) *
это нормальная практика в любой нормальной конторе - изолировать чужой не самый лучший код, пока он не врос в проект как раковая опухоль.
...
Изолировать чужой говнокод можно даже на асм-е.

За употребление слова "говнокод" я б вас забанил.
На самом деле так называют код в котором не могут разобраться, не знают контекст в котором он писался и для кого писался.
Таким образом перенося свою эмоцию на несчастный код.
А потом еще и изолируетесь от этого кода. lol.gif
Вам похоже тяжело дается чужой код. wink.gif
Дам вам совет. Не воюйте с кодом, а делайте его своим.
Начните с перехода на чистый С-и с урезанными синтаксисом, лучше даже MISRA-С. Пишите на языке на котором написана основная масса вашего кода.
Освойте рефакторинг, и увидите как у вас пропадут отрицательные эмоции к коду.
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
- - arhiv6   А кто-нибудь использует для обработки ошибок CExce...   Apr 25 2018, 10:43
|- - Forger   Цитата(arhiv6 @ Apr 25 2018, 13:43) А кто...   Apr 25 2018, 17:47
|- - 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
|- - 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
||- - 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 Текстовая версия Сейчас: 24th June 2025 - 18:50
Рейтинг@Mail.ru


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