К содержимому
ИС30

Поиск по сайту

Конспекты, лабы, квизы, ЧаВо и страницы

Войти

Лекция 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. Порядок сдачи лабы

  1. Для каждой лабы создаётся свой репозиторий.
  2. Для каждого дедлайна заводится отдельная ветка deadline_N, нумерация с нуля.
  3. Готовое решение выкладывается через pull request до дедлайна. PR не сливается в основную ветку.
  4. По желанию заполняется форма заявки на код-ревью.
  5. Замечания ревью исправляются.
  6. Лаба показывается преподавателю на практике.

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. Инструменты

ЗадачаОсновной инструментАльтернативы
КомпиляторClangGCC, MSVC
СборкаCMake—
РедакторVS CodeCLion, Visual Studio, Qt Creator
ТестированиеGoogleTestCatch2
Контроль версийGit—
ОтладкаLLDB, GDBсанитайзеры
Качество кодаclang-format, clang-tidy—

9. Первая программа

Классическая программа «Hello, world!» выводит приветствие в стандартный поток вывода:

hello-world.cpp
#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