Лекция 0. Вводная лекция. Язык C и C++
Устройство курса и правила оценивания, история и стандарты языков C и C++, сферы применения, инструменты, первая программа и сборка через CMake.
Вводная лекция отвечает на три вопроса: как устроен курс, почему изучаем именно C и C++ и с чего начать. Цель курса одна: научиться объяснять компьютеру свои мысли. По пути проходим стандарты C++98–C++23, процедурное программирование, ООП, основы проектирования и культуру разработки. Ниже организация курса, краткая история языков и первая программа.
Разделы 1 и 2 про то, что влияет на оценку, их стоит сохранить. Остальное — материал для понимания языка. Полные правила по баллам и защите лаб — в практике 1.
1. Организация курса
Курс ведут Александр Павлович Хвастунов и Сергей Викторович Фадеев. В команде около 30 человек: лекторы, практики и менторы.
| Что | Как устроено |
|---|---|
| Проходной минимум | 60 баллов из 100 |
| Лабораторные работы | 60 баллов, всего 5 работ |
| Живое кодирование (live coding) | 10 баллов |
| Зачёт | 30 баллов, дифференцированный, в январе |
Лекции, лабы и вопросы к зачёту хранятся в Git.
1.1. Правила для лабораторных
- Работаем через Git, CMake и стиль Google Code Style.
- Решения проверяются на плагиат и на использование ИИ. Код пишется руками.
- Мягкий дедлайн: через две недели баллы за лабу снижаются ступенями. Потолок за лабу: 100 %, затем 85 %, 65 % и 50 %.
Ниже 50 % потолок не падает: лаба, сданная в самом конце, всё равно даёт половину баллов. Чем раньше сдача, тем выше потолок.
1.2. Порядок сдачи лабы
- Для каждой лабы создаётся свой репозиторий.
- Для каждого дедлайна заводится отдельная ветка
deadline_N, нумерация с нуля. - Готовое решение выкладывается через pull request до дедлайна. PR не сливается в основную ветку.
- По желанию заполняется форма заявки на код-ревью.
- Замечания ревью исправляются.
- Лаба показывается преподавателю на практике.
1.3. Семинары и материалы
Семинары регулярные и необязательные: они дополняют лекции. Объявления, материалы и вопросы преподавателям, менторам и студентам идут в Telegram-канал курса. Видео с занятий ведёт Александр Хвастунов на своём YouTube-канале.
2. Цель курса
- Стандарты C++98–C++23 и их отличия.
- Процедурное программирование на C и C++.
- Объектно-ориентированное программирование.
- Основы проектирования и культура разработки: стиль, тесты, Git, сборка.
3. От UNIX к C++
Язык C создали в Bell Labs в 1969–1973 годах для системного программирования под UNIX. В 1978 году вышла книга Кернигана и Ритчи, которая долго оставалась главным описанием языка. В 1979–1985 годах «C with Classes» Страуструпа превратился в C++.
3.1. Стандарты C
- C89 (ANSI) и C90 (ISO) — первые стандартизованные версии.
- C99, C11, C17.
- C23 — последняя опубликованная версия.
3.2. Стандарты C++
- C++98, C++03, C++11, C++14, C++17, C++20, C++23 (ISO/IEC 14882:2024).
- C++26 находится на стадии Draft International Standard, то есть близок к финалу.
Примеры в старых учебниках написаны под C++98. Современный код использует возможности C++11 и новее, поэтому при чтении смотрите, для какого стандарта написан пример. В лабах используем современный стандарт.
4. C и C++: общая основа и разные языки
- C++ унаследовал большую часть синтаксиса C, но современный C не является его строгим подмножеством.
- C++ проверяет типы строже.
- Языки стандартизируются и развиваются независимо друг от друга.
- Код на C можно использовать в C++, если он соблюдает общий синтаксис.
Выражение int *p = malloc(10); в C компилируется, потому что void * неявно приводится к любому указателю. В C++ такой код не компилируется: нужно явное приведение типа. Одна строка, два разных языка.
5. Язык C
Процедурный, статически типизированный, компилируемый язык. Даёт низкоуровневый контроль над памятью, имеет компактное ядро. Динамическую память управляем вручную: что выделили, то и освобождаем.
6. Язык C++
Мультипарадигменный язык: процедурное, объектно-ориентированное и обобщённое программирование. Сочетает низкоуровневый контроль с высокоуровневыми абстракциями и имеет большую стандартную библиотеку.
7. Где применяют C и C++
- Системное ПО и операционные системы.
- Встраиваемые системы.
- Инструменты разработки: компиляторы, редакторы, отладчики.
- Высокопроизводительные вычисления.
- Игры и графика.
- Инфраструктура: браузеры, СУБД, сетевые сервисы.
- Машинное обучение.
8. Инструменты
| Задача | Основной инструмент | Альтернативы |
|---|---|---|
| Компилятор | Clang | GCC, MSVC |
| Сборка | CMake | — |
| Редактор | VS Code | CLion, Visual Studio, Qt Creator |
| Тестирование | GoogleTest | Catch2 |
| Контроль версий | Git | — |
| Отладка | LLDB, GDB | санитайзеры |
| Качество кода | clang-format, clang-tidy | — |
9. Первая программа
Классическая программа «Hello, world!» выводит приветствие в стандартный поток вывода:
#include <iostream>
int main() {
std::cout << "Hello world!\n";
return 0;
}#include <iostream>подключает объявления потоков ввода и вывода.std::cout— стандартный поток вывода.main— точка входа в программу. Возвращаемое значение0означает успешное завершение.
9.1. Сборка через CMake
CMake описывает, как собирать проект, и умеет генерировать файлы для других сред сборки. VS Code поддерживает его напрямую.
cmake -B build
cmake --build buildПервая команда конфигурирует проект в каталоге build, вторая собирает его.
Что проверить после лекции
- Знаю, сколько баллов нужно для проходного минимума и из чего они складываются.
- Понимаю, что такое мягкий дедлайн и как работает ветка
deadline_N. - Установлены компилятор, CMake и VS Code.
- Программа «Hello world» собирается командами
cmake -B buildиcmake --build build.
Шпаргалка
| Понятие | Суть |
|---|---|
| Проходной минимум | 60 баллов из 100 |
| Мягкий дедлайн | Потолок за лабу снижается ступенями: 100 %, 85 %, 65 %, 50 % |
Ветка deadline_N | Отдельная ветка под каждый дедлайн лабы, нумерация с нуля |
| Pull request без слияния | Способ сдать решение, не вливая его в основную ветку |
| C | Процедурный, статически типизированный, память управляется вручную |
| C++ | Мультипарадигменный, стандарты C++98–C++23 |
| CMake | Конфигурация и сборка проекта: -B build, --build build |
Актуальная версия: https://m3105.ru/notes/osnovy-programmirovaniya/lektsiya-0-vvodnaya-lektsiya-yazyk-c-i-c

Комментарии0
Пока никто ничего не написал.
Войдите, чтобы оставить комментарий