Практика языка C (МФТИ, 2023-2024). Интермедия. Стандарт языка C.
Практические занятия по языку 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
* Тут пока пусто
У меня теперь каждая суббота начинается с этих лекций )
У меня жизнь началась с этих лекций 😅
Душевная атмосфера на семинаре. И звук с картинкой сделали достойно. Прям так и хочется что-то приятное написать
Лайк как всегда ❤
Такое милое начало)). Сразу видно, что вы офигенный препод!
Благодарю
Спасибо!
Прекрасный лектор!
Вот бы от Вас в Вашем неповторимом изложении послушать про стандарт C24 с пояснениями, что, зачем и почему там было добавлено
Я планирую записать видео. Но не сейчас а когда его примут.
@@tilir заранее огромное спасибо за вашу деятельность
Милота)))
34:10 когда начали говорить что разыменование нулпоинтера может быть соптимизровано ожидал на следующем слайде увидеть классический пример из статьи "Why undefined behavior may call a never-called function" вызова по указателю на функцию, в которой лежит нулпоинтер.
Да, это достойный классический пример. Постоянно его упускаю.
Проверил пример - на clang все еще актуален. На gcc не воспроизвелось. Сначала пытался по памяти его написать, но не получилось из-за того, что потерял static в объявлении переменной. Видимо если нет static, то компилятор считает что эту переменную засетапят из другого файла и не видит смысла в этой "оптимизации".
37:30 Скомпилил пример в godbolt в gcc и clang для арма, добавив в конце вывод k и инициализацию массива случайным числом, всегда k=16 . GCC дает предупреждение iteration 15 invokes undefined behavior [-Waggressive-loop-optimizations], а clang даже передупреждения не дает.
46:00 Как вариант, найти индекс старшей единицы в обеих переменных, и проверить, что сумма меньше, чем индекс старшего бита в INT_MAX (lg(a) + lg(b) < lg(INT_MAX))
37:12 да это ужастно, нужно думать как компилятор, синтаксис ничего не значит.
А это какой по номеру семинар, 8.0?
Нет, это без номера. Посередине между 7 и 8, у меня такие раньше уже были.
makefile???
Первый курс всё-таки. Я к слову скоро запишу допсеминар по простой сборке.
@@tilir супер!
36:42 на gcc выводит не 42.
Дайте угадаю: вы -О2 забыли подать?
@@tilir с ним выводит, но вы на слайде написали, что на всех известных вам компиляторах выведет 42, без упоминания флага) Но лекция интересная, не знал о таком. Спасибо!
Как следует из того что я объясняю, они не просто так это делают, а в итоге оптимизаций. То есть попросить оптимизировать всё таки надо.
@@tilir Спасибо за семинары! Всё верно, с -О2 выводит 42 ✌
Это про вас говорят, что вы ставите двойки только за темную тему в IDE?
Эм... это что то очень странное. То есть меня иногда упрекают в странных вещах но тут я в полной растерянности. Нет, я не ставлю двойки и разумеется никогда никак не критикую студентов за любую тему в их IDE или в консоли.
Фигаж се контент! Я в шоке.
на 37 минуте явная ошибка. по умолчанию в переменную х запишется тот мусор, который был в стеке. лично у меня вывелось 63683453
Дайте угадаю. Забыли подать -O2?