Практика языка C (МФТИ, 2023-2024). Интермедия. Стандарт языка C.

2024 ж. 3 Мам.
14 512 Рет қаралды

Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.
На этом занятии мы поговорим о стандарте C. Мы начнём с попытки изобрести очень простой язык программирования и увидим на его примере основные особенности поведения высокоуровневых программ. Далее мы подробно разберём разные формы поведения программ на языке C, познакомимся и потренируемся со стандартом языка.
У нас будет один вставной момент где я учу детей разбивать программы на модули и писать тесты. Это связано с тем что они сейчас делают проекты, можете это пропустить если смотрите эту лекцию в отрыве от основного курса.
В конце я приготовил небольшое рассуждение про важность стандартизации.
Семинарист: Константин Владимиров.
Дата: 15 апреля 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.
Предыдущий семинар: • Практика языка C (МФТИ...
Следующий семинар: • Практика языка C (МФТИ...
Слайды к занятиям: cs.mipt.ru/wp/?page_id=7775
Примеры кода: github.com/tilir/c-graduate
Задачник: olymp1.vdi.mipt.ru/
00:00 Язык программирования INC и поведение программ
12:38 Семантика и стандарт языка
23:50 Поведение программ
34:15 Неопределённое поведение
47:17 Тренировка в чтении стандарта и время решать задачи
50:20 Немного информации про проект и live coding
01:08:43 Стандарт как источник знаний
01:19:11 Важность стандартизации
Errata
* Тут пока пусто

Пікірлер
  • У меня теперь каждая суббота начинается с этих лекций )

    @total_anihilation@total_anihilation13 күн бұрын
    • У меня жизнь началась с этих лекций 😅

      @sibedir@sibedir13 күн бұрын
  • Душевная атмосфера на семинаре. И звук с картинкой сделали достойно. Прям так и хочется что-то приятное написать

    @user-cy3do4xc2c@user-cy3do4xc2c8 күн бұрын
  • Лайк как всегда ❤

    @user-fw3kx2ix3p@user-fw3kx2ix3p14 күн бұрын
  • Такое милое начало)). Сразу видно, что вы офигенный препод!

    @pitche@pitche13 күн бұрын
  • Благодарю

    @saefsasdf@saefsasdf6 күн бұрын
  • Спасибо!

    @ruslankhl@ruslankhl13 күн бұрын
  • Прекрасный лектор!

    @ill4374@ill437413 күн бұрын
  • Вот бы от Вас в Вашем неповторимом изложении послушать про стандарт C24 с пояснениями, что, зачем и почему там было добавлено

    @moshamiracle@moshamiracle14 күн бұрын
    • Я планирую записать видео. Но не сейчас а когда его примут.

      @tilir@tilir13 күн бұрын
    • @@tilir заранее огромное спасибо за вашу деятельность

      @moshamiracle@moshamiracle13 күн бұрын
  • Милота)))

    @johoaprl2505@johoaprl25059 күн бұрын
  • 34:10 когда начали говорить что разыменование нулпоинтера может быть соптимизровано ожидал на следующем слайде увидеть классический пример из статьи "Why undefined behavior may call a never-called function" вызова по указателю на функцию, в которой лежит нулпоинтер.

    @ivankorotkov2563@ivankorotkov256314 күн бұрын
    • Да, это достойный классический пример. Постоянно его упускаю.

      @tilir@tilir14 күн бұрын
    • Проверил пример - на clang все еще актуален. На gcc не воспроизвелось. Сначала пытался по памяти его написать, но не получилось из-за того, что потерял static в объявлении переменной. Видимо если нет static, то компилятор считает что эту переменную засетапят из другого файла и не видит смысла в этой "оптимизации".

      @ivankorotkov2563@ivankorotkov256314 күн бұрын
  • 37:30 Скомпилил пример в godbolt в gcc и clang для арма, добавив в конце вывод k и инициализацию массива случайным числом, всегда k=16 . GCC дает предупреждение iteration 15 invokes undefined behavior [-Waggressive-loop-optimizations], а clang даже передупреждения не дает.

    @OldAndy@OldAndy12 күн бұрын
  • 46:00 Как вариант, найти индекс старшей единицы в обеих переменных, и проверить, что сумма меньше, чем индекс старшего бита в INT_MAX (lg(a) + lg(b) < lg(INT_MAX))

    @DmitryKandiner@DmitryKandiner8 күн бұрын
  • 37:12 да это ужастно, нужно думать как компилятор, синтаксис ничего не значит.

    @alexs7931@alexs793113 күн бұрын
  • А это какой по номеру семинар, 8.0?

    @user-zg2bx5cb3d@user-zg2bx5cb3d10 күн бұрын
    • Нет, это без номера. Посередине между 7 и 8, у меня такие раньше уже были.

      @tilir@tilir10 күн бұрын
  • makefile???

    @McGewen@McGewen14 күн бұрын
    • Первый курс всё-таки. Я к слову скоро запишу допсеминар по простой сборке.

      @tilir@tilir13 күн бұрын
    • @@tilir супер!

      @McGewen@McGewen13 күн бұрын
  • 36:42 на gcc выводит не 42.

    @friren_elf@friren_elf8 күн бұрын
    • Дайте угадаю: вы -О2 забыли подать?

      @tilir@tilir8 күн бұрын
    • @@tilir с ним выводит, но вы на слайде написали, что на всех известных вам компиляторах выведет 42, без упоминания флага) Но лекция интересная, не знал о таком. Спасибо!

      @friren_elf@friren_elf8 күн бұрын
    • Как следует из того что я объясняю, они не просто так это делают, а в итоге оптимизаций. То есть попросить оптимизировать всё таки надо.

      @tilir@tilir8 күн бұрын
    • @@tilir Спасибо за семинары! Всё верно, с -О2 выводит 42 ✌

      @bv9876@bv98767 күн бұрын
  • Это про вас говорят, что вы ставите двойки только за темную тему в IDE?

    @noch_temna111@noch_temna11111 күн бұрын
    • Эм... это что то очень странное. То есть меня иногда упрекают в странных вещах но тут я в полной растерянности. Нет, я не ставлю двойки и разумеется никогда никак не критикую студентов за любую тему в их IDE или в консоли.

      @tilir@tilir11 күн бұрын
  • Фигаж се контент! Я в шоке.

    @tohaya123@tohaya1237 күн бұрын
  • на 37 минуте явная ошибка. по умолчанию в переменную х запишется тот мусор, который был в стеке. лично у меня вывелось 63683453

    @frokinnfrok9007@frokinnfrok90075 күн бұрын
    • Дайте угадаю. Забыли подать -O2?

      @tilir@tilir5 күн бұрын
KZhead