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

preview_player
Показать описание
Практические занятия по языку C на первом курсе МФТИ. Кафедра информатики.

На этом занятии мы поговорим о стандарте C. Мы начнём с попытки изобрести очень простой язык программирования и увидим на его примере основные особенности поведения высокоуровневых программ. Далее мы подробно разберём разные формы поведения программ на языке C, познакомимся и потренируемся со стандартом языка.

У нас будет один вставной момент где я учу детей разбивать программы на модули и писать тесты. Это связано с тем что они сейчас делают проекты, можете это пропустить если смотрите эту лекцию в отрыве от основного курса.

В конце я приготовил небольшое рассуждение про важность стандартизации.

Семинарист: Константин Владимиров.
Дата: 15 апреля 2024 года.
Съёмка: Марк Гончаров.
Звук: Юлий Тарасов.

00:00 Язык программирования INC и поведение программ
12:38 Семантика и стандарт языка
23:50 Поведение программ
34:15 Неопределённое поведение
47:17 Тренировка в чтении стандарта и время решать задачи
50:20 Немного информации про проект и live coding
01:08:43 Стандарт как источник знаний
01:19:11 Важность стандартизации

Errata
* Тут пока пусто
Рекомендации по теме
Комментарии
Автор

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

cat
Автор

Душевная атмосфера на семинаре. И звук с картинкой сделали достойно. Прям так и хочется что-то приятное написать

Александр-йби
Автор

Такое милое начало)). Сразу видно, что вы офигенный препод!

knodesec
Автор

Вот бы от Вас в Вашем неповторимом изложении послушать про стандарт C24 с пояснениями, что, зачем и почему там было добавлено

moshamiracle
Автор

1:14:11 - отвечу за студентов))
designated-initializer-list
[i] - элемент массива по данному индексу заполняется. А дальше в списке от него пляшется. В итоге, в начале 1, 3, 5, в конце 8, 4, 2, а в середине нули
1:14:11 - и опечатка в енуме есть - точка с запятой не там :)

alex_s_ciframi
Автор

33:26 мое любимое UB - std:: unreachable()

thepawday
Автор

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

ivankorotkov
Автор

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

OldAndy
Автор

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

DmitryKandiner
Автор

Константин, спасибо за лекцию.
6:33 - а разве $ нельзя в именах идентификаторов в C и C++ ? GCC, GDB, студия - позволяют. Хотя, на cpprefrence доллар не упомянут, вообще говоря

alex_s_ciframi
Автор

37:12 да это ужастно, нужно думать как компилятор, синтаксис ничего не значит.

alexs
Автор

Это про вас говорят, что вы ставите двойки только за темную тему в IDE?

noch_temna
Автор

Пришёл из-за аниме, остался из-за раскрутки стека.

tetraphobie
Автор

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

frokinnfrok