Ошибки как часть дизайна программы на C • Live coding

Поділитися
Вставка
  • Опубліковано 25 січ 2025

КОМЕНТАРІ • 33

  • @КузьмаМазуренко

    Очень интересно и удивительно актуально, вне зависимости от уровня. Спасибо огромное!

  • @_dzen_tv_
    @_dzen_tv_ 10 днів тому

    59:40 Это вопрос о цикломатической сложности. И в данном случае мы видим один из вариантов её уменьшения.
    Если почитать исходники парсеров дат или вещественных чисел то можно увидеть как люди "упражняются" в данной дисциплине.
    Да и множественные ретурны с ошибками это норм, правда не в мире розовых пони.
    Зачем нам дальше выполнять бессмысленную работу если наткнулись на ошибку.

  • @rudthakyred_alert6359
    @rudthakyred_alert6359 12 днів тому

    Можно создать стек с указателями на выделенную память и освобождать ее по мере необходимости.(Захардкоженный строго типезированный массив определенного размера с проверкой переполнения стека и реализацией поведения при переполнении).
    Или реализовать аналог vector (с указателями на следующей и предыдущий выделенный в памяти элемент).
    Это для тех кому не понравился пример с выделением памяти. А так да, создать структуру errors (например) элементы которой будут указывать на различные ошибки при выполнения кода затем разбераем ошибки. Например ошибки приема данных по тому же UART или неверный строб (не по таймингу) и т.д.
    Автору: нашел Вас недавно, смотрю стримы с удовольствием! Так держать!

    • @olgapavlova
      @olgapavlova  11 днів тому

      Постараюсь сделать ещё и стрим по техникам со звёздочкой. В том числе и по тем, что вы упомянули. Спасибо!

  • @s6x9n
    @s6x9n 15 днів тому +3

    ❤❤❤

  • @_dzen_tv_
    @_dzen_tv_ 10 днів тому

    1:06:00 По поводу таблиц истинности не совсем корректно(это касается комментария из чата).
    Таблица истинности подразумевает проверку всех входных значений при формировании результата.
    А в данном случае происходит вычисление выражения.
    && или || - это булевый оператор. Значит для него нужно вычислить левое и правое выражения.
    Но реализация оператора предусматривает оптимизацию и опускает вычисление правого выражения в случае истинности(ложности) левого.
    if (left || right) do_work();
    по факту отрабатывает как:
    if (left == true) do_work();
    else if (right == true) do_work();

  • @mtp7261
    @mtp7261 15 днів тому

    У нас реестр, у них sdn - паритет, если видеть общую картину системы под названием человечество.
    Однабокость не окрыляет.
    Этот стрим философским получился,
    goto к чистым истокам )

  • @DruiD478
    @DruiD478 14 днів тому

    Благодарю за информацию‼️🫡

  • @mtp7261
    @mtp7261 15 днів тому

    Ольга, расскажите о себе немного. Какие проекты вы разрабатываете на Си.

  • @Виктор-ч1ц3з
    @Виктор-ч1ц3з 15 днів тому

    59:37, разве при завершении программы, выделенная ей память не освобождается?
    Про динамическую память было бы интересно послушать

    • @Виктор-ч1ц3з
      @Виктор-ч1ц3з 15 днів тому

      Просто если программа уже завершается, какой смысл работать с памятью. Про файловые дескрипторы пример был бы понятнее, если идея была в том, что мы должны корректно освободить ресурсы

    • @olgapavlova
      @olgapavlova  15 днів тому

      Дело в том, что многие программы, написанные на C, должны работать постоянно. Поэтому на событие «завершение программы» полагаться и нельзя. Впрочем, если вы точно знаете, что программа завершится в предсказуемое время, а работает она при этом на системе с приличным объёмом памяти - да, можно забить на все эти утечки (я вам этого не говорила :)). Просто знаете вы это крайне редко.

  • @m_stifeev
    @m_stifeev 19 годин тому

    Здравствуйте. Лекция получилась интересная. Но один вопрос из чата так и остался без ответа. Что всё-таки с зарплатами программистов на си?

    • @olgapavlova
      @olgapavlova  19 годин тому

      Ну почему же без ответа. Ответ всё тот же: мне эта тема не интересна, а кругом полно желающих её обстоятельно обсудить. Их спрашивать точно эффективней.

  • @MSaidu-sj6vx
    @MSaidu-sj6vx 14 днів тому

    День добрый. Можете ли Вы рассмотреть вопрос передачи функции как параметра для функции. С моим знанием английского и возможностями Google переводчика ничего не понял. Думаю, данная информация будет интересна не только для меня.

    • @olgapavlova
      @olgapavlova  14 днів тому +1

      Без проблем, в одном из ближайших видео будет. Спасибо за идею!

  • @Retro_Botanik
    @Retro_Botanik 10 днів тому

    Ольга здравствуйте. Не планируете цикл передач "С для начинающих" с самого нуля, вплоть с установки и настройки среды?

    • @olgapavlova
      @olgapavlova  10 днів тому

      Спасибо за идею. Тут с кондачка не сделаешь, готовиться надо :) Я обязательно подумаю, но не в ближайшие полгода.

    • @Retro_Botanik
      @Retro_Botanik 10 днів тому

      @@olgapavlova Ну а можно хотя бы видео по установке и настройке ПО для С которым пользуетесь вы?

    • @olgapavlova
      @olgapavlova  10 днів тому

      Вы, кстати, видели лекции Тимофея Хирьянова по основам Си? Очень хороши.

    • @olgapavlova
      @olgapavlova  10 днів тому +1

      По установке-настройке сделаю, договорились :)

    • @Retro_Botanik
      @Retro_Botanik 10 днів тому

      @olgapavlova Спасибо!

  • @NickChi
    @NickChi 15 днів тому

    В obs есть настройка фильтра шумоподавления на микро. Не будет шума от кулера. ❤

  • @aleksandr2245
    @aleksandr2245 14 днів тому

    а по JS видео будут?)

    • @olgapavlova
      @olgapavlova  14 днів тому +1

      Будут, но не очень скоро. Надеюсь, через год.

    • @aleksandr2245
      @aleksandr2245 14 днів тому

      @olgapavlova супер, спасибо)

  • @NickChi
    @NickChi 15 днів тому

    Динамическая память самая больная тема в си. Ждем лекции

  • @mtp7261
    @mtp7261 15 днів тому

    Очень круто
    int ok = 1;
    ok = ok && !check_f();

    • @_dzen_tv_
      @_dzen_tv_ 10 днів тому

      int ok = 0;
      ok = ok || check_f();
      или
      ok = (ok || step1() || step2() || step_n() || step_end()) && err_f();
      или
      ok = (ok || (step1() && err1()) || (step2() && err2()) || (step_n() && err_n()) || (step_end() && err_end())) && err_f();