16.12.2020. № 2-12. Оптимизирующие преобразования

Развернуть

Видеозапись: https://youtu.be/nC9n9ejejOY

Compiler Explorer — сайт для быстрого просмотра ассемблерного кода, порождаемого компиляторами: https://godbolt.org/z/9n4abn.

Описание стажировки в Excelsior@Huawei: http://rnew.tilda.ws/excelsiorathuawei

02.12.2020. № 2-10. Препроцессор C

Развернуть

  • include и макро-переменные, принцип работы include guard
  • макро-фукции (макросы): особенности и недостатки
  • макросы как операторы, трюк с do {} while (0)
  • макросы __FILE__, __LINE__
  • оператор #
  • макро-переменная NDEBUG
  • макросы с переменным числом аргументов и проблема пустого списка аргументов

Видеозапись: https://youtu.be/Wg8tNb2snMg

Исходный код: https://github.com/cypok/opk_examples/tree/master/12_preprocessor

18.11.2020. № 2-9. Трансляция

Развернуть

  1. Графические библиотеки для проектов.
  2. Спектр задач, в которых появляется трансляция.
  3. Виды анализа: лексический, синтаксический, семантический.
  4. Лексические анализаторы (сканеры).
  5. Интерфейс сканера.
  6. Ручная реализация сканера для вычисления арифметических выражений.
  7. Недетерминированные конечные автоматы (НКА).
  8. Регулярные выражения.
  9. Трансформация регулярных выражений в НКА.
  10. Понятие порождающей грамматики.
  11. Пример грамматики для скобочных выражений.
  12. Контекстно-свободные грамматики и деревья разбора.
  13. Построение грамматики для разбора арифметических выражений.
  14. Отражение приоритетов операций в грамматике выражений.
  15. Метод рекурсивного спуска.
  16. Реализация разбора арифметических выражений с помощью рекурсивного спуска, обработка ошибок.

Библиотека для консольной графики: https://github.com/cypok/console_graphics
Библиотека для пиксельной графики: https://github.com/cypok/sdl_example

Видеозапись: https://youtu.be/otDw0hhaNVE

11.11.2020. № 2-8. Модули, процесс компиляции

Развернуть

  • Неявное использование функций из других единиц трансляции.
  • Процесс компиляции C: раздельная трансляция и линковка. Ошибки линковки.
  • static как способ ограничения линковки.
  • Проблемы неявного использования функций из других единиц трансляции.
  • Заголовочные файлы.
  • Защита от кратного подключения заголовочного файла.
  • Использование глобальных переменных из других единиц трансляции.
  • Полный пример с публичной структурой (https://github.com/cypok/opk_examples/tree/master/lectures/modules/rational).
  • Полный пример с приватной структурой (https://github.com/cypok/opk_examples/tree/master/lectures/modules/stack).

Видеозапись: https://youtu.be/riitAPh7Apo

28.10.2020. № 2-7. Структуры, объединения

Развернуть

  • Синтаксис структур в C
  • Вложенные структуры
  • Оператор typedef
  • Выравнивание полей и размера структуры
  • Flexible array member
  • Объединения

Видеозапись: https://youtu.be/sCX8tZANS4M

21.10.2020. № 2-6. Виды памяти, UB & Co.

Развернуть

  • Статическая память.
  • Автоматическая память.
  • Динамическая память.
  • malloc/calloc/free/realloc и примеры использования.
  • Утечки памяти.
  • Проблема фрагментации.
  • Implementation-defined behavior.
  • Unspecified behavior.
  • Undefined behavior.
  • Агрессивные оптимизации, основанные на UB.

14.10.2020. № 2-5. Указатели, массивы, строки

Развернуть

  • Массивы в C
  • Прием и передача массивов в функции
  • Указатели
  • Возвращение значений через параметр-указатель
  • Массивы как указатели
  • NULL, void*
  • Строки

23.09.2020. № 2-4. Подпрограммы

Развернуть

  1. Макросы.
  2. Адрес возврата.
  3. Соглашение о вызовах. Передача аргументов, результатов. Сохраняемые регистры.
  4. Стек. Рекурсивные функции.

Исходный код

16.09.2020. № 2-3. Вещественные числа

Развернуть

  1. Вещественные числа как рациональные дроби.
  2. Представление с фиксированной точкой.
  3. Фиксированная точка и двоично-десятичный код.
  4. Числа с плавающей точкой. Binary32, binary64, битовое устройство числа, варианты хранимых чисел.
  5. Возможные проблемы плавающей арифметики.
  6. Пример проблем: сравнение двух "равных" чисел.
  7. Пример проблем: вычисление числа π по двум формулам.

Действия