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

  Рет қаралды 16,281

Konstantin Vladimirov

Konstantin Vladimirov

Күн бұрын

Практические занятия по языку 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
* Тут пока пусто

Пікірлер: 38
@cat35467
@cat35467 2 ай бұрын
У меня теперь каждая суббота начинается с этих лекций )
@sibedir
@sibedir 2 ай бұрын
У меня жизнь началась с этих лекций 😅
@user-cy3do4xc2c
@user-cy3do4xc2c Ай бұрын
Душевная атмосфера на семинаре. И звук с картинкой сделали достойно. Прям так и хочется что-то приятное написать
@user-fw3kx2ix3p
@user-fw3kx2ix3p 2 ай бұрын
Лайк как всегда ❤
@pitche
@pitche 2 ай бұрын
Такое милое начало)). Сразу видно, что вы офигенный препод!
@alex_s_ciframi
@alex_s_ciframi 5 күн бұрын
1:14:11 - отвечу за студентов)) designated-initializer-list [i] - элемент массива по данному индексу заполняется. А дальше в списке от него пляшется. В итоге, в начале 1,3,5 , в конце 8,4,2, а в середине нули 1:14:11 - и опечатка в енуме есть - точка с запятой не там :)
@saefsasdf
@saefsasdf Ай бұрын
Благодарю
@thepawday
@thepawday Ай бұрын
33:26 мое любимое UB - std:: unreachable()
@ill4374
@ill4374 2 ай бұрын
Прекрасный лектор!
@ruslankhl
@ruslankhl 2 ай бұрын
Спасибо!
@alex_s_ciframi
@alex_s_ciframi 5 күн бұрын
Константин, спасибо за лекцию. 6:33 - а разве $ нельзя в именах идентификаторов в C и C++ ? GCC, GDB, студия - позволяют. Хотя, на cpprefrence доллар не упомянут, вообще говоря
@moshamiracle
@moshamiracle 2 ай бұрын
Вот бы от Вас в Вашем неповторимом изложении послушать про стандарт C24 с пояснениями, что, зачем и почему там было добавлено
@tilir
@tilir 2 ай бұрын
Я планирую записать видео. Но не сейчас а когда его примут.
@moshamiracle
@moshamiracle 2 ай бұрын
@@tilir заранее огромное спасибо за вашу деятельность
@johoaprl2505
@johoaprl2505 Ай бұрын
Милота)))
@OldAndy
@OldAndy Ай бұрын
37:30 Скомпилил пример в godbolt в gcc и clang для арма, добавив в конце вывод k и инициализацию массива случайным числом, всегда k=16 . GCC дает предупреждение iteration 15 invokes undefined behavior [-Waggressive-loop-optimizations], а clang даже передупреждения не дает.
@ivankorotkov2563
@ivankorotkov2563 2 ай бұрын
34:10 когда начали говорить что разыменование нулпоинтера может быть соптимизровано ожидал на следующем слайде увидеть классический пример из статьи "Why undefined behavior may call a never-called function" вызова по указателю на функцию, в которой лежит нулпоинтер.
@tilir
@tilir 2 ай бұрын
Да, это достойный классический пример. Постоянно его упускаю.
@ivankorotkov2563
@ivankorotkov2563 2 ай бұрын
Проверил пример - на clang все еще актуален. На gcc не воспроизвелось. Сначала пытался по памяти его написать, но не получилось из-за того, что потерял static в объявлении переменной. Видимо если нет static, то компилятор считает что эту переменную засетапят из другого файла и не видит смысла в этой "оптимизации".
@DmitryKandiner
@DmitryKandiner Ай бұрын
46:00 Как вариант, найти индекс старшей единицы в обеих переменных, и проверить, что сумма меньше, чем индекс старшего бита в INT_MAX (lg(a) + lg(b) < lg(INT_MAX))
@user-zg2bx5cb3d
@user-zg2bx5cb3d Ай бұрын
А это какой по номеру семинар, 8.0?
@tilir
@tilir Ай бұрын
Нет, это без номера. Посередине между 7 и 8, у меня такие раньше уже были.
@alexs7931
@alexs7931 2 ай бұрын
37:12 да это ужастно, нужно думать как компилятор, синтаксис ничего не значит.
@McGewen
@McGewen 2 ай бұрын
makefile???
@tilir
@tilir 2 ай бұрын
Первый курс всё-таки. Я к слову скоро запишу допсеминар по простой сборке.
@McGewen
@McGewen 2 ай бұрын
@@tilir супер!
@noch_temna111
@noch_temna111 Ай бұрын
Это про вас говорят, что вы ставите двойки только за темную тему в IDE?
@tilir
@tilir Ай бұрын
Эм... это что то очень странное. То есть меня иногда упрекают в странных вещах но тут я в полной растерянности. Нет, я не ставлю двойки и разумеется никогда никак не критикую студентов за любую тему в их IDE или в консоли.
@alex_s_ciframi
@alex_s_ciframi 5 күн бұрын
а эти распускатели слухов в курсе, что в институтах двойки не ставят? :D
@tetraphobie
@tetraphobie Ай бұрын
Пришёл из-за аниме, остался из-за раскрутки стека.
@friren_elf
@friren_elf Ай бұрын
36:42 на gcc выводит не 42.
@tilir
@tilir Ай бұрын
Дайте угадаю: вы -О2 забыли подать?
@friren_elf
@friren_elf Ай бұрын
@@tilir с ним выводит, но вы на слайде написали, что на всех известных вам компиляторах выведет 42, без упоминания флага) Но лекция интересная, не знал о таком. Спасибо!
@tilir
@tilir Ай бұрын
Как следует из того что я объясняю, они не просто так это делают, а в итоге оптимизаций. То есть попросить оптимизировать всё таки надо.
@bv9876
@bv9876 Ай бұрын
@@tilir Спасибо за семинары! Всё верно, с -О2 выводит 42 ✌
@tohaya123
@tohaya123 Ай бұрын
Фигаж се контент! Я в шоке.
@frokinnfrok9007
@frokinnfrok9007 Ай бұрын
на 37 минуте явная ошибка. по умолчанию в переменную х запишется тот мусор, который был в стеке. лично у меня вывелось 63683453
@tilir
@tilir Ай бұрын
Дайте угадаю. Забыли подать -O2?
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 8 МЛН
Just try to use a cool gadget 😍
00:33
123 GO! SHORTS
Рет қаралды 80 МЛН
My programming language
0:25
MGAMES!
Рет қаралды 71 М.
Её Старший Брат Настоящий Джентельмен ❤️
00:18
Глеб Рандалайнен
Рет қаралды 8 МЛН