|
Коды завершения функции |
|
|
|
 |
Ответов
|
Apr 25 2018, 17:47
|

Профессионал
    
Группа: Свой
Сообщений: 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.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
|
Apr 25 2018, 18:05
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Forger @ Apr 25 2018, 20:47)  Это капитально улучшает читаемость кода, т.к. не нужно после возврата из такой функции проводить анализ возвращаемого кода ошибки с монстроподобным switch-case. Ну да - заменяя на монстроподобный механизм exception. Цитата(Forger @ Apr 25 2018, 20:47)  Сейчас остается все меньше и меньше кода на голом С, он явно умирает, равно как и умер в свое время ASM в чистом виде Сейчас всё меньше и меньше народу пишет на си, всё больше быдлокодят на абдурине. Следуя Вашей логике - так и следует делать. И все остальные утверждения - по меньшей мере спорны, если не полностью ложны....
|
|
|
|
|
Apr 25 2018, 18:11
|

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

|
Цитата(jcxz @ Apr 25 2018, 20:58)  Ну да - заменяя на монстроподобный механизм exception. exception - это не замена функции с параметром и последущими switch-case (если функции вложенные, то вообще полный швах - кода много, да толку мало) это вообще разные вещи и применять их следует в разных ситуациях Есть неплохие статьи на эту тему: https://habr.com/post/264417/Я лично использую exception только для аварийных (исключительных) ситуаций, а разбор ошибок реализую несколько иначе (см. предыдущий пост). Причина этому у меня лично очень простая - не очень хорошая память и лень: не могу в голове удерживать десятки невнятных функций с их кучей параметров и лень рыться в мануалах каждый раз как их использовать )) Цитата всё больше быдлокодят на абдурине. Следуя Вашей логике - так и следует делать. Я смотрю, ардуинщики для вас - больная тема  А быдлокодеры - это вообще отдельная каста "программеров". Приходится с ними часто работать? Тогда сочувствую ((( Кстати, редкий ардуинщик понимает, что имеет дело с вполне полноценным С++ компилятором под AVR и потому строчит он по сути на голом С.
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|