История создания и развития языка C. Классификация и основные характеристики языка C. Роль и место языка C в современной экосистеме языков программирования.
Основные элементы синтаксиса языка. Наборы символов: базовый, исходный, времени выполнения, расширенный.
Препроцессор. Включения и макроподстановки. Условная компиляция. Комментарии. Дополнительные возможности препроцессора.
Описания и определения. Типы и объекты. Классы памяти. Стандартные типы. Перечисления. Производные типы: указатели, массивы, структуры, объединения, функции. CVR-квалификаторы. Совместимые и композитные типы. Выравнивание типов.
Выражения. Побочные эффекты. Лево- и праводопустимые выражения. Константы. Составные литералы. Операции и их применимость к различным типам. Явные и неявные приведения типов. Ранги целочисленных типов. Стандартное расширение типов. Константные выражения. Инициализаторы. Выделенные инциализаторы.
Функции. Механизм вызова функций, передачи и возврата аргументов. Рекурсия. Встраиваемые функции.
Дополнительные возможности языка C. Проверки времени выполнения. Массивы переменной длины. Типы переменной длины.
Стандартная библиотека языка C. Обзор возможностей стандартной библиотеки. Строковые функции. Динамическая память. Потоки ввода-вывода. Форматированный, текстовый и двоичный ввод/вывод. Операции с файлами. Математические функции. Стандартные функции. Проверки времени выполнения. Целочисленные типы фиксированной длины. Вариадические функции. Комплексные числа. Функции обработки многобайтных и широких символов, локализация, работа с Unicode. Дальние переходы.
Раздел 2. Язык программирования С++
История создания и развития языка C++. Классификация и основные характеристики языка C++. Роль и место языка C++ в современной экосистеме языков программирования.
Конструкции языка C, несовместимые с языком C++. Разработка программ с использованием нескольких языков.
Ссылки. Автоматический вывод типов, ключевые слово auto и decltype.
Перегрузка функций. Декорированные имена. Аргументы по умолчанию. Хвостовой возвращаемый тип. Автоматическое определение возвращаемого типа.
Пространства имён. Объявление и директива using. Аргументо-зависимый поиск.
Объектно-ориентированное программирование. Классы. Инкапсуляция. Уровни доступа. Члены класса: поля и методы. Инициализация членов внутри класса. Конструкторы класса. Делегирование конструкторов. Деструкторы. Перегрузка операций. Специальные члены классы и их реализации по умолчанию, спецификаторы default и delete. explicit члены класса. Дружественные функции и классы. Статические компоненты класса.
Праводопустимые ссылки. Семантика переноса.
Наследование и полиморфизм. Наследование конструкторов. Механизм виртуальных функций, спецификаторы override и final. Интерфейсы и абстрактные базовые классы. Управление доступом. Множественное наследование.
Динамическая информация о типах, операции приведения типов.
Операторы new и delete. Операция new с размещением. Константа нулевого указателя.
Перечисления с областью видимости.
Исключения. Механизм обработки исключений. Спецификации исключений.
Шаблоны. Шаблоны функций. Шаблоны классов. Типы параметров шаблонов. Значения параметров шаблонов по умолчанию. Частичная специализация. Псевдонимы шаблонов. Шаблоны с переменным числом аргументов. Шаблоны переменных.
Стандартная библиотека шаблонов. Интеллектуальные указатели. Обобщённое программирование. Концепции, уточнения и модели. Функторы. Лямбда-выражения. Обобщённые лямбда-выражения и выражения захвата. Контейнеры, итераторы и алгоритмы. Алгоритмическая сложность. Основные структуры данных. Цикл for, основанный на диапазоне. Строки. Потоки ввода-вывода. Регулярные выражения.
Средства метапрограммирования. Кортежи. Обобщённые константные выражения. Пользовательские литералы. Обобщённые атрибуты.