Программа делает ровно то, что вы написали, а не то, что вы имели в виду. Когда
одно расходится с другим, в программе есть ошибка (по-английски bug,
«жучок»), а её поиск называется отладкой. Любой программист тратит на это
изрядную часть времени — новичок отличается от опытного не тем, что опытный не
делает ошибок, а тем, что у него есть способ их находить. Этот урок даёт вам
такой способ. И тут помогают функции: ошибку гораздо легче найти в функции на
десять строк, чем в main на сотню.
Три вида неприятностей
| Что вы видите | Что это | Куда смотреть |
|---|---|---|
| Программа не собирается: компилятор печатает ошибки | ошибка компиляции: код нарушает правила C++ | строка, которую называет сообщение, или строка над ней |
| Собирается, но останавливается посередине; система пишет Runtime error | падение: индекс за пределами вектора, деление на ноль | индексы и делители на том вводе, где программа упала |
| Работает до конца, но ответ неверный | логическая ошибка: код говорит не то, что вы имели в виду | где угодно — об этом весь остальной урок |
Как читать ошибку компилятора
Сообщения компилятора выглядят пугающе, но устроены одинаково: файл,
строка и столбец, слово error и что пошло не так. Вот функция, в которой
пропущена точка с запятой, и то, что говорит о ней g++:
В файле функция стоит под #include, using namespace std; и пустой строкой,
поэтому — это строка 5, а — строка 6. Сообщение называет
строку 6, где , потому что именно там компилятор ,
что чего-то не хватает. А точка с запятой нужна в конце строки 5. Если сообщение
не имеет смысла для своей строки, посмотрите на строку выше.