Иллюстрированный самоучитель по C++ Builder

Ошибки. Предупреждения и подсказки.

Компилятор переходит ко второму этапу генерации выполняемой программы только в том случае, если исходный текст не содержит синтаксических ошибок. В большинстве случаев в только что набранной программе есть ошибки. Программист должен их устранить. Процесс устранения ошибок носит итерационный характер. Обычно сначала устраняются наиболее очевидные ошибки, например, объявляются необъявленные переменные. После очередного внесения изменений в текст программы выполняется повторная компиляция.

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

// вычислить ток
i = u/r
//. вывести результат в поле метки
Label4 › Caption = "Ток: " +
FloatToStrF(i,ffGeneral,7.2) + " А";

Не поставлена точка с запятой после оператора присваивания. Компилятор это обнаруживает, выводит сообщение statement missing;, но выделяет строку Label4 › caption = "Ток: " + и устанавливает курсор после идентификатора Label4.

В табл. 2.10 перечислены типичные ошибки и соответствующие им сообщения компилятора.

Таблица 2.10. Типичные ошибки.

Сообщение Ошибка
Undefined symbol (неизвестный символ) Используется необъявленная переменная Имя переменной, функции или параметра записано неверно. Например, в программе объявлена переменная Summ, а в инструкциях используется sum
Statement missing; (отсутствует точка с запятой) После инструкции не поставлена точка с запятой
Unterminated string or character constant (незаконченная строковая или символьная константа) В конце строковой константы, например, текста сообщения, нет двойных кавычек
expected (ожидается закрывающая скобка) При записи арифметического выражения, содержащего скобки, нарушен баланс открывающих и закрывающих скобок
if statement missing ((в инструкции if нет открывающей скобки) В инструкции if условие не заключено в скобки
Compound statement missing
Нарушен баланс открывающих и закрывающих фигурных скобок. Вероятно, не поставлена закрывающая фигурная скобка отмечающая конец функции или группы инструкций, например, после условия или слова else в инструкции if
Extra parameter in call to (лишний параметр при вызове функции) Неверно записана инструкция вызова функции, указан лишний параметр

Если компилятор обнаружил достаточно много ошибок, то просмотрите все сообщения и устраните сначала наиболее очевидные ошибки и выполните повторную компиляцию. Вполне вероятно, что после этого количество ошибок значительно уменьшится. Это объясняется особенностями синтаксиса языка, когда одна незначительная ошибка может "тащить" за собой довольно большое количество других.

Предупреждения и подсказки

При обнаружении в программе неточностей, которые не являются ошибками, компилятор выводит подсказки (Hints) и предупреждения (Warnings). Например, наиболее часто выводимой подсказкой является сообщение об объявленной, но не используемой переменной (… is declared but never used.). Действительно, зачем объявлять переменную и не использовать ее? В табл. 2.11 приведены предупреждения, наиболее часто выводимые компилятором.

Таблица 2.11. Предупреждения компилятора.

Предупреждение Вероятная причина
… is declared but never used  
Possibly incorrect assignment. (вероятно, инструкция присваивания некорректная) В условии, например, инструкции if, вместо оператора сравнения (=) использован оператор присваивания (=)
Possibly use of… before definition. (вероятно, используется неинициализированная переменная) Не присвоено начальное значение переменной
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.