59:40 Это вопрос о цикломатической сложности. И в данном случае мы видим один из вариантов её уменьшения. Если почитать исходники парсеров дат или вещественных чисел то можно увидеть как люди "упражняются" в данной дисциплине. Да и множественные ретурны с ошибками это норм, правда не в мире розовых пони. Зачем нам дальше выполнять бессмысленную работу если наткнулись на ошибку.
Можно создать стек с указателями на выделенную память и освобождать ее по мере необходимости.(Захардкоженный строго типезированный массив определенного размера с проверкой переполнения стека и реализацией поведения при переполнении). Или реализовать аналог vector (с указателями на следующей и предыдущий выделенный в памяти элемент). Это для тех кому не понравился пример с выделением памяти. А так да, создать структуру errors (например) элементы которой будут указывать на различные ошибки при выполнения кода затем разбераем ошибки. Например ошибки приема данных по тому же UART или неверный строб (не по таймингу) и т.д. Автору: нашел Вас недавно, смотрю стримы с удовольствием! Так держать!
1:06:00 По поводу таблиц истинности не совсем корректно(это касается комментария из чата). Таблица истинности подразумевает проверку всех входных значений при формировании результата. А в данном случае происходит вычисление выражения. && или || - это булевый оператор. Значит для него нужно вычислить левое и правое выражения. Но реализация оператора предусматривает оптимизацию и опускает вычисление правого выражения в случае истинности(ложности) левого. if (left || right) do_work(); по факту отрабатывает как: if (left == true) do_work(); else if (right == true) do_work();
У нас реестр, у них sdn - паритет, если видеть общую картину системы под названием человечество. Однабокость не окрыляет. Этот стрим философским получился, goto к чистым истокам )
Просто если программа уже завершается, какой смысл работать с памятью. Про файловые дескрипторы пример был бы понятнее, если идея была в том, что мы должны корректно освободить ресурсы
Дело в том, что многие программы, написанные на C, должны работать постоянно. Поэтому на событие «завершение программы» полагаться и нельзя. Впрочем, если вы точно знаете, что программа завершится в предсказуемое время, а работает она при этом на системе с приличным объёмом памяти - да, можно забить на все эти утечки (я вам этого не говорила :)). Просто знаете вы это крайне редко.
Ну почему же без ответа. Ответ всё тот же: мне эта тема не интересна, а кругом полно желающих её обстоятельно обсудить. Их спрашивать точно эффективней.
День добрый. Можете ли Вы рассмотреть вопрос передачи функции как параметра для функции. С моим знанием английского и возможностями Google переводчика ничего не понял. Думаю, данная информация будет интересна не только для меня.
Очень интересно и удивительно актуально, вне зависимости от уровня. Спасибо огромное!
59:40 Это вопрос о цикломатической сложности. И в данном случае мы видим один из вариантов её уменьшения.
Если почитать исходники парсеров дат или вещественных чисел то можно увидеть как люди "упражняются" в данной дисциплине.
Да и множественные ретурны с ошибками это норм, правда не в мире розовых пони.
Зачем нам дальше выполнять бессмысленную работу если наткнулись на ошибку.
Можно создать стек с указателями на выделенную память и освобождать ее по мере необходимости.(Захардкоженный строго типезированный массив определенного размера с проверкой переполнения стека и реализацией поведения при переполнении).
Или реализовать аналог vector (с указателями на следующей и предыдущий выделенный в памяти элемент).
Это для тех кому не понравился пример с выделением памяти. А так да, создать структуру errors (например) элементы которой будут указывать на различные ошибки при выполнения кода затем разбераем ошибки. Например ошибки приема данных по тому же UART или неверный строб (не по таймингу) и т.д.
Автору: нашел Вас недавно, смотрю стримы с удовольствием! Так держать!
Постараюсь сделать ещё и стрим по техникам со звёздочкой. В том числе и по тем, что вы упомянули. Спасибо!
❤❤❤
1:06:00 По поводу таблиц истинности не совсем корректно(это касается комментария из чата).
Таблица истинности подразумевает проверку всех входных значений при формировании результата.
А в данном случае происходит вычисление выражения.
&& или || - это булевый оператор. Значит для него нужно вычислить левое и правое выражения.
Но реализация оператора предусматривает оптимизацию и опускает вычисление правого выражения в случае истинности(ложности) левого.
if (left || right) do_work();
по факту отрабатывает как:
if (left == true) do_work();
else if (right == true) do_work();
У нас реестр, у них sdn - паритет, если видеть общую картину системы под названием человечество.
Однабокость не окрыляет.
Этот стрим философским получился,
goto к чистым истокам )
Благодарю за информацию‼️🫡
Ольга, расскажите о себе немного. Какие проекты вы разрабатываете на Си.
59:37, разве при завершении программы, выделенная ей память не освобождается?
Про динамическую память было бы интересно послушать
Просто если программа уже завершается, какой смысл работать с памятью. Про файловые дескрипторы пример был бы понятнее, если идея была в том, что мы должны корректно освободить ресурсы
Дело в том, что многие программы, написанные на C, должны работать постоянно. Поэтому на событие «завершение программы» полагаться и нельзя. Впрочем, если вы точно знаете, что программа завершится в предсказуемое время, а работает она при этом на системе с приличным объёмом памяти - да, можно забить на все эти утечки (я вам этого не говорила :)). Просто знаете вы это крайне редко.
Здравствуйте. Лекция получилась интересная. Но один вопрос из чата так и остался без ответа. Что всё-таки с зарплатами программистов на си?
Ну почему же без ответа. Ответ всё тот же: мне эта тема не интересна, а кругом полно желающих её обстоятельно обсудить. Их спрашивать точно эффективней.
День добрый. Можете ли Вы рассмотреть вопрос передачи функции как параметра для функции. С моим знанием английского и возможностями Google переводчика ничего не понял. Думаю, данная информация будет интересна не только для меня.
Без проблем, в одном из ближайших видео будет. Спасибо за идею!
Ольга здравствуйте. Не планируете цикл передач "С для начинающих" с самого нуля, вплоть с установки и настройки среды?
Спасибо за идею. Тут с кондачка не сделаешь, готовиться надо :) Я обязательно подумаю, но не в ближайшие полгода.
@@olgapavlova Ну а можно хотя бы видео по установке и настройке ПО для С которым пользуетесь вы?
Вы, кстати, видели лекции Тимофея Хирьянова по основам Си? Очень хороши.
По установке-настройке сделаю, договорились :)
@olgapavlova Спасибо!
В obs есть настройка фильтра шумоподавления на микро. Не будет шума от кулера. ❤
Спасибо!
а по JS видео будут?)
Будут, но не очень скоро. Надеюсь, через год.
@olgapavlova супер, спасибо)
Динамическая память самая больная тема в си. Ждем лекции
Очень круто
int ok = 1;
ok = ok && !check_f();
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();