|
Коды завершения функции |
|
|
|
 |
Ответов
|
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:14
|
Гуру
     
Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713

|
Цитата(Forger @ Apr 25 2018, 20:47)  Читаемость такого кода значительно выше, чем функция, в которую суют вагон разношерстных параметров и еще эта функция возвращает какой-то код ошибки. Читаемость - это сомнительно, скорее - наоборот: кода больше (лишнего причём), с чего бы читаемость-то тогда повысилась? А вот монстроидальность такого кода неоспоримо выше! Цитата(Forger @ Apr 25 2018, 21:11)  exception - это не замена функции с параметром и последущими switch-case Оно, насколько я помню, здорово отжирает стек. На МК да ещё с применением RTOS сиё - существенный минус.
|
|
|
|
|
Apr 25 2018, 18:21
|

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

|
Цитата(jcxz @ Apr 25 2018, 21:14)  Читаемость - это сомнительно, скорее - наоборот: кода больше (лишнего причём), с чего бы читаемость-то тогда повысилась? Вовсе нет, кода как раз меньше, читается он значительно легче. К такому коду комментарии вообще не требуются. Кстати, мне крайне редко приходится писать комментарии. А, если комментарий все же требуется, то это признак того, что этот кусок кода потребует последующего допила Цитата А вот монстроидальность такого кода неоспоримо выше! По ходу, вы не знаете о чем говорите. Либо мы ведем речь о разных в корне вещах. Цитата Оно, насколько я помню, здорово отжирает стек. На МК да ещё с применением RTOS сиё - существенный минус. Все там нормально работает и жрется стек не так криминально, особенно если камень выбрать правильно. Конечно же на маленьких камнях exception ни к чему. Он нужен лишь в больших проектах. Впрочем, это я уже указал. Вообше, к чему все это? В голом С - некая эмуляция exception - бред, реально бред упёртого сишника, который всеми правдами и неправдами ищет способ оправдать свой страх и не желание изучать нормальный инструментарий (в частности C++)
--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
|
|
|
|
Сообщений в этой теме
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 страниц
1 2 >
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|