Перейти к содержимому
Topos Uranos

Краткое содержание

В этом уроке устанавливается порядок работы, которому курс будет следовать до конца. Урок описывает цикл из правки, сохранения, компиляции, запуска и чтения и объясняет, почему ошибку выгодно обнаружить на как можно более раннем этапе; приводит команду компиляции, которую рекомендует курс, и назначение каждой из её опций; показывает, как пройти цикл в терминале и как настроить Visual Studio Code, чтобы он компилировал с теми же опциями; учит отличать в выводе компилятора ошибку от предупреждения и находить строку, к которой они относятся; знакомит с санитайзерами, которые останавливают программу, когда она допускает некоторые виды неопределённого поведения, и указывают строку; и готовит консоль к правильному выводу кириллицы.

Цели обучения

  1. Компилировать программу в терминале с опциями курса (-std=c++23 -Wall -Wextra и остальными), задавать имя исполняемого файла опцией -o и запускать его.
  2. Настраивать Visual Studio Code так, чтобы он компилировал с теми же опциями, что и терминал, и показывал предупреждения на своей панели проблем.
  3. Отличать в выводе компилятора ошибку от предупреждения, называть опцию, которая породила каждое предупреждение, и находить строку, к которой оно относится.
  4. Включать санитайзеры ошибок памяти и неопределённого поведения и распознавать в их отчёте вид сбоя и строку, где он произошёл.
  5. Определять, почему в выводе появляются странные символы вместо букв кириллицы, и настраивать редактор и консоль так, чтобы буквы отображались правильно.

Рабочий цикл

Написание программы есть не единичный акт, а цикл, который повторяется десятки раз за один сеанс. В нём пять моментов: исходный код правят; файл сохраняют, потому что компилятор читает диск, а не экран редактора; его компилируют, то есть просят компилятор перевести файл в исполняемый; результат запускают; и внимательно читают всё, что написали компилятор и программа. Прочитанное ведёт к новой правке, и цикл начинается снова.

Последним моментом пренебрегают чаще всего, хотя важнее всего именно он. Посылка проста: дефект обходится тем дороже, чем позже его обнаруживают. Если его указывает компилятор, известно, в какой строке и почти всегда почему; если он проявляется при запуске, известно лишь, что что-то пошло не так; если он проявляется через несколько недель, на других данных, причину может так никто и не узнать. Отсюда следует, что дефекты лучше обнаруживать как можно раньше и что к компилятору нужно относиться как к первому проверяющему программы: неутомимому читателю, который при правильной настройке предупреждает о гораздо большем, чем опечатки.

В этом уроке этот проверяющий настраивается на трёх уровнях: ошибки, которые не позволяют получить исполняемый файл; предупреждения компилятора, которые это позволяют, но указывают на подозрительный код; и санитайзеры, которые следят за программой во время её выполнения. Предполагается, что компилятор и редактор установлены (урок 1.3). В примерах используются переменные и инструкции if, которые будут объяснены в уроках 2.1 и 4.1; здесь их достаточно прочитать.