Как писать функции, применимые к разным типам данных, или Мнимый полиморфизм в C (Си)

Поделиться
HTML-код
  • Опубликовано: 20 янв 2025

Комментарии • 75

  • @TheLordWilex
    @TheLordWilex 12 дней назад +4

    Я программирую на c++ и то давно уже не программирую. И я не знаю зачем я вообще смотрю лекцию про си, особенно с учетом того, что мне через 4 часа на работу вставать. Но очень залипательно! Лайк, подписка и с нетерпением жду ещё Ваших лекций!

  • @ВладимирПавленко-д8ш
    @ВладимирПавленко-д8ш 13 дней назад +2

    Очень признателен за вашу работу и эту публикацию. Она мне как философу поможет обосновать решение проблемы субъектности и связи математики с социальной философией. Спасибо!

  • @alexishome4322
    @alexishome4322 17 дней назад +5

    Коммент в поддержку канала ❤❤❤
    Мне прям очень^2 нравиться как Вы рассказываете.

    • @ВладимирПавленко-д8ш
      @ВладимирПавленко-д8ш 13 дней назад

      я не читал и не слушал ещё, но сама постановка проблемы очень обрадовала, это то, о чём я давненько думал, но не знал, как подступиться. Чуть освобожусь - и стану читать и вникать, спасибо огромное автору ❤

  • @Shineglow
    @Shineglow 12 дней назад +1

    Очень кртая лекция и не менее крутая лектор. Большое спасибо за понятное объяснение и интересную тему.

  • @Nämë_öt
    @Nämë_öt 14 дней назад +3

    С моей подпиской к Вам придёт много народа. Так держать!

  • @vdrmkr
    @vdrmkr 14 дней назад +3

    Женщина в Си это конечно удивительно и интересно, если бы у меня был такой учитель информатики думаю я бы полюбил программирование ещё в школе

    • @olgapavlova
      @olgapavlova  14 дней назад +2

      Удивительно - это слон в 3D-принтере :) А женщины - они где только не, чего б и не в Си.
      Сейчас-то полюбили? Надеюсь, да!

    • @vdrmkr
      @vdrmkr 13 дней назад

      @olgapavlova я-то уже 5 лет как полюбил, руководитель в крупном банке в 26. А мог прям со школы, тогда в 18 можно было бы уже выходить на рынок труда сразу на достойные условия. Так что школота - мотайте на ус.

    • @oeaoo
      @oeaoo 12 дней назад

      какая кринжатина всё-таки, и оно ж даже не понимает что пишет емое

  • @sashababushkin8258
    @sashababushkin8258 12 дней назад +1

    За 10 лет кодинга так и не столкнулся с ситуацией, где бы этот полиморфизм был прям нужен-нужен. Но для учебных целей, понимать, какую хрень тянет за собой всё это .... ДА, ЭТО ПОЛЕЗНО!

  • @deadman-o7d
    @deadman-o7d 14 дней назад +4

    Си прост, но нужно быть гением, чтобы понять его простоту.

    • @daiske2867
      @daiske2867 14 дней назад

      И нужно быть PhD, чтобы понять, что там, где действительно нужна была простота, имеем...

  • @hsqlk
    @hsqlk 12 дней назад +1

    Сам пишу на Python, но поскольку он написан на С, то однозначно лайк

  • @_dzen_tv_
    @_dzen_tv_ 14 дней назад +1

    30:25 Ещё хорошей практикой для макросов является использование конструкции do{}while(0)

  • @Глупыйдурачок
    @Глупыйдурачок 13 дней назад +2

    Ждём видео про произвольное количество аргументов!! Возможно кстати можно кодогенерацию как-то настроить?

    • @olgapavlova
      @olgapavlova  13 дней назад

      Да, дней через 10 сделаю про произвольное количество аргументов.
      Кодогенерацию в некоторых объёмах можно, постараюсь чуть позже показать основные штуки там.

  • @exx-ns4tt
    @exx-ns4tt 16 дней назад

    опять питон🙃🪱🪱. Благодарю Вас, много нового узнал👍🤝

  • @MSaidu-sj6vx
    @MSaidu-sj6vx 11 дней назад

    Был на ютубе канал "си от эксперта", не обновлялся уже давно. Будете ли Вы рассматривать "тонкие" моменты при программировании в Си ( появление "утечек памяти", откуда они берутся, если в явном виде выделения не происходило и подобные моменты )?

    • @olgapavlova
      @olgapavlova  11 дней назад +1

      А это тонкие? Я просто пребываю в счастливом заблуждении, что утечки памяти - это ого-го какие толстые моменты :) Наберу материала - расскажу, конечно. Спасибо за мысль!

  • @a.d.d.i.t.
    @a.d.d.i.t. 14 дней назад +1

    2:00
    В Си для мелочи-встройки или при очень строгих требованиях по быстродействию лучше переписать алгоритм под нативные для железки форматы данных, а сам язык позволяет удобно писать не выходя за рамки возможностей железа.
    19:20
    NULL - это не значение "ноль", это указатель (!!!) типа void, указывающий на нулевой адрес. При чтении такого указателя без разыменования будет считываться ноль, но тип такой "переменной" будет приводиться к типу, используемому в данной аппаратуре для указателей, как и при чтении любого другого указателя. В большинстве случаев это будет int. Но не всегда.
    ...
    В целом - жуть. Зашёл на заголовок про полиморфизм в Си, на деле тут вводная о том как написать макросы для реализации перегрузки в Си.

    • @olgapavlova
      @olgapavlova  13 дней назад

      Может быть, язык и позволяет, а вот образовательные материалы по нему - нет.
      Вы правы, NULL - это _в большинстве случаев_ (но не всегда) void*.
      Знаете, я, пожалуй, продолжу ориентироваться не на вас, а на свою аудиторию и свои задачи.
      Правкам в комментах буду рада, могут пригодиться (а могут и нет).

    • @a.d.d.i.t.
      @a.d.d.i.t. 13 дней назад

      @@olgapavlova
      Си как язык по сути является человекочитаемым аппаратно-независимым ассемблером, об этом часто забывают. Заходить в Си без знаний о регистрах, разрядности, ширине слов, АЛУ и прочих базовых понятий довольно странно. Все похожие на С++, C#, Java и других языков фокусы были введены в язык для того чтобы в компиляторах были одни и те же ассемблерные определения и поэтому рантаймы библиотеки написанные на разных языках в принципе можно было использовать совместно.
      Ну хорошо, не всегда на void. В любом случае, в Си и плюсах при начале работы на новой платформе и/или новом компиляторе всегда надо смотреть хотя бы в содержимое stddef, а не удивляться приведению к типу, указанному в макросе стандартного заголовочного файла.
      На тему ориентирования на аудиторию - в названии слово полиморфизм, а не деле всё не выходит за рамки самописного велосипеда для перегрузки имён функций. Это по сути введение в заблуждение.
      Нужен высокоуровневый язык с прямым доступом к памяти - берите плюсы. Си нужен там, где программист проверяет в дизассемблере вывод тулчейна, для чего в свою очередь нужно чтобы символы в дизассемблере и символы в исходнике всегда совпадали.
      Правки комментов - смотрю видео, по ходу дела пишу и дописываю комментарий. Так и получаются правки.

    • @olgapavlova
      @olgapavlova  13 дней назад

      Ответственный подход, спасибо.
      Вообще я очень рада, что в комменты пришли люди, лучше меня (гораздо лучше!) разбирающиеся в предмете.
      Вы правы насчёт того, что без базовых понятий заходить в Си странно. Однако перед нами реальность: Си массово используют как первый язык. Да, в надежде на то, что человечество отвлечётся от Python и заметит, что программирует на железненьком таком компьютере, а не на Всемогущей Универсальной Шайтан-Машине с GUI-интерфейсом :-) Но, увы, это приводит к тому, к чему приводит: «Слушай, а программа - это вообще что?» Приходится объяснять.
      Разным людям разное. Заходите ещё :) Можно чуть позже, когда с драйверами будем развлекаться (точно будем).

  • @blusterhash
    @blusterhash 13 дней назад +1

    Здравствуйте, а в рамках чего проходят данные стримы? Есть какой-то курс по си?

    • @olgapavlova
      @olgapavlova  13 дней назад +5

      Да просто рассказываю что кажется интересным, никаких формальностей :)

  • @m_stifeev
    @m_stifeev 11 дней назад

    Здравствуйте. Спасибо лекцию. После просмотра сразу возникли вопросы. 1) Как макрос _Generic реагирует на наличие модификаторов const, volatile, restrict у управляющего выражения? Он их отбрасывает, или нужно писать "реализацию" под каждый вариант/варианты? Или явно кастовать в тип без модификаторов? 2) Если передать NULL напрямую (без посредников-указателей) в управляющую конструкцию, то разве весь макрос не раскроется по ветке с int, ведь NULL = 0 по факту?

    • @olgapavlova
      @olgapavlova  11 дней назад +1

      Прекрасные вопросы, спасибо.
      Отвечу в двух словах.
      1. Все верхнеуровневые квалификаторы типа отвалятся перед сравнением. То есть тип const int в вариантах задавать нет смысла, достаточно int. И отличить тип с квалификатором от типа без квалификатора (верхнеуровневого) нельзя всё по той же причине: cvr-квалификаторы не доживают до момента сравнения, отваливаются.
      2. В большинстве компиляторов конкретно для Си NULL - это макрос для сущности с типом (void *). Так что он чаще всего и опознаётся как void *. Что до равенства нулю, то это, скажем так, встречается, но далеко не повсеместно. Вообще тут не устоялась норма, насколько я знаю.
      Если ошибаюсь, буду рада об этом узнать.

  • @MSaidu-sj6vx
    @MSaidu-sj6vx 11 дней назад

    Оооо!!!! Шикарная тема!

  • @tuksser
    @tuksser 12 дней назад

    Познавательно очень! Расскажите какой стек применяете на работе? В каком области работаете?

    • @olgapavlova
      @olgapavlova  12 дней назад

      Моя компания автоматизирует дизайн интерфейсов. От Си это очень, очень далеко.

    • @tuksser
      @tuksser 12 дней назад

      @@olgapavlova что востребовано знать и уметь чтобы работать в eduhund?

    • @olgapavlova
      @olgapavlova  12 дней назад

      @@tuksser TypeScript + React + общая эрудиция по фронтенду и сетям - ваши верные друзья :) Но мы пока не нанимаем.

  • @yavbvb123
    @yavbvb123 14 дней назад +1

    А где можно посмотреть расписание будущих стримов?

    • @olgapavlova
      @olgapavlova  14 дней назад +2

      Хорошая идея, спасибо. Вывешу в описание канала.
      Ближайший - про ошибки как часть дизайна программы на C (Си).

    • @yavbvb123
      @yavbvb123 14 дней назад

      @@olgapavlova это просто великолепно!

  • @LetroScript
    @LetroScript 14 дней назад

    Ольга, а вы знате плюсы (C++)? Если да, то будут видео по нему?

    • @olgapavlova
      @olgapavlova  13 дней назад +1

      Ага, будут видео по C++ - примерно через полгода.

  • @НиколайШорников-н7т
    @НиколайШорников-н7т 11 дней назад

    Поскольку во freepascal(да, я патологоанатом) одинаково названные функции, но с разными аргументами считаются разными и ошибок компиляции не вызывают, я по наивности своей предполагал, что в в С тоже самое))) а оказывается необходимо женерик городить, но всё равно прикольно. А людей "боящихся" точку-с-запятой предлагаю в программисты не брать)))

  • @exx-ns4tt
    @exx-ns4tt 16 дней назад +1

    1:14:33 офигенный пример

  • @nataliepodgainova6582
    @nataliepodgainova6582 12 дней назад +1

    Просто апплодирую стоя😊

  • @megannnn98
    @megannnn98 11 дней назад

    Ждём продолжение

  • @notforvideoschannel
    @notforvideoschannel 13 дней назад +1

    Для процессора вообще нет таких понятий как переменная и тип данных. Существует только понятие данных и размера этих данных (byte, word, dword, qword). А остальное - это уже высокоуровневая интерпретация.

    • @olgapavlova
      @olgapavlova  13 дней назад +3

      Ещё два шага - и мы доберёмся до того, что нет никаких нулей и единиц, а есть только по соглашению высокий и по тому же соглашению низкий уровень напряжения. И между ними кое-что внезапно вполне осязаемое :)
      Короче, каждой истории свой уровень абстракции.

  • @mtp7261
    @mtp7261 12 дней назад

    Отличный канал, как получить ваши замечательные настройки vim?

    • @olgapavlova
      @olgapavlova  12 дней назад

      Спасибо за вопрос. Выложу. К сожалению, не обещаю, что скоро.

  • @Shineglow
    @Shineglow 12 дней назад

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

    • @olgapavlova
      @olgapavlova  12 дней назад

      Добью вопрос, ага. Спасибо за идею!

  • @Retro_Botanik
    @Retro_Botanik 12 дней назад

    В каком редакторе происходит написание кода?

    • @olgapavlova
      @olgapavlova  12 дней назад

      vim

    • @Retro_Botanik
      @Retro_Botanik 11 дней назад

      ​Ольга вы очень обаятельная и грамотная женщина.
      Почему бы вам не записать видео где вы рассказываете о себе, о занятиях и увлечениях?

    • @olgapavlova
      @olgapavlova  11 дней назад

      @@Retro_Botanik Спасибо за идею!

    • @MSaidu-sj6vx
      @MSaidu-sj6vx 11 дней назад

      ​@@olgapavlova Наш человек!!! Самый лучший редактор ( настроил под себя, с остальными только мучался месяцами ).

  • @ДмитрийКиселев-е1й1с

    А как вам Zig?

    • @olgapavlova
      @olgapavlova  11 дней назад

      О, вы уже второй, кто спрашивает :) Определённого мнения пока нет, но это временно. Расскажу, как будет что.

  • @ВсеволодПарфёнов-ф2ъ
    @ВсеволодПарфёнов-ф2ъ 16 дней назад +2

    С таким применением union не согласен, а остальное - отлично.

    • @olgapavlova
      @olgapavlova  16 дней назад

      А как вы его обычно используете?

    • @ВсеволодПарфёнов-ф2ъ
      @ВсеволодПарфёнов-ф2ъ 16 дней назад

      @@olgapavlova Обычно я его использовал, когда требовалось что-то разобрать на байты, или собрать обратно. Очень удобный инструмент при разборе, например, сетевых пакетов.

  • @dmitriizapalatovskii2658
    @dmitriizapalatovskii2658 14 дней назад

    Зачем это все чтобы напечатать одну строчку. Джависты: и это всё?

  • @sibedir
    @sibedir 16 дней назад

    "Зловещая пауза" (с) 😊
    Кто понял, тот понял

  • @НадеждаШейко-е9н
    @НадеждаШейко-е9н 15 дней назад

    То есть на Си надо написать целую библиотеку чтобы сделать аналог паскалевского WriteLn(); ?) Эх, отсталый язык!)

    • @olgapavlova
      @olgapavlova  15 дней назад

      И не говорите! Дикие люди, дети гор :)

    • @dmitriizapalatovskii2658
      @dmitriizapalatovskii2658 14 дней назад

      У нас есть WriteLn дома (printf)

  • @alexzk3
    @alexzk3 16 дней назад

    Я от не понимаю любителей С... ну ведь уже ж есть шаблоны в С++ :) Уже все изобрели и оттестировали. И виртуальность всякая есть. Нет, продолжают изобретать С++ в частных случаях.

    • @olgapavlova
      @olgapavlova  16 дней назад +1

      Насамперед це iграшка. Як на мене, дуже цикава.

    • @alexzk3
      @alexzk3 16 дней назад

      @@olgapavlova Думаю, для линукса пропихнули. Я код ядра как-то глянул - случайный файл - и сразу увидел, как они там С++ /виртуальные функции изобретают. Зато все вручную, с "полным контролем". Я этого "контроля" наелся на МК-61 :))

    • @ГеннадийШушпанов-д1ч
      @ГеннадийШушпанов-д1ч 13 дней назад

      так пусть изобретают, если есть желание. Всегда можно изобрести что-то новое. Если бы было таких людей, то, возможно, до сих пор на велосипеде ездили бы ногами от земли отталкиваясь :) Однако ж педали крутим.

    • @philkulibin2602
      @philkulibin2602 13 дней назад

      Есть программы которые действительно хуже работают если написаны на с++ а не с. Это RT (реал тайм) приложения. Си код более поозрачен и главное более предсказуем по времени выполнения любого участка кода. Полной предсказуемости нет всё равно но всё гораздо более предсказуемо чем в Си++ программе где STL используется. Другая крайность это Си# там есть уборка мусора и любой деструктор не предсказуем. То есть время выполнения мало зависит от кода если объекты там создаются или удаляются а вот количество и фрагментированность свободной памяти на момент выполнения этого кода очень даже сильно влияют. Насчёт прозрачности тоже на голом Си как-то проще. В отладчике зайти в функцию это действительно зайти в одну функцию а в Си++ зачастую пока зайдёшь прийдется зайти и выйти в кучу функций преобразования для аргументов желаемой функции. Отладка в Си прозрачнее.

    • @Mytest437
      @Mytest437 12 дней назад

      Я думаю изобретают, потому что С++ используют те кто пишет на С++, а вот С часто бывает мостом для других языков через FFI. Он проще как раз сопрягается с другими языками и поэтому ценен сам без С++.

  • @default-writer
    @default-writer 10 дней назад

    Типобезопасность в С - это просто ну конечно нужен не дедушкин С а какой-то более современный модификант или С3 на худой конец

    • @olgapavlova
      @olgapavlova  10 дней назад

      Дорастём - разберём, ага.