Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Сообщения компилятора и компоновщика




На примере простого приложения с ошибочными операторами выясним, какие сообщения об ошибках и какие предупреждения выдает компилятор. Начните новое приложение, перенесите на форму метку Label и кнопку Button. В обработчик щелчка кнопки введите следующие операторы:

void _fastcall TForm1::Button1Click(Tobject *Sender)

{

int i,j;

double A;

for(i=0; i<50;i++)

A*=10000; //Увеличение A в 10000 раз

Label1->Caption = “A = “ +B;

}

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

Внизу окна Редактора Кода появятся сообщения о замечаниях и ошибках. Первое сообщение:

[C++ Warning] Unit1.cpp (23): W8013 Possible use of ‘A’ before definition

([C++ Предупреждение] модуль Unit1.cpp, строка 23: W8013 Переменная ‘A’, возможно, используется до того, как ей присвоено значение)

Это предупреждение о том, что переменная A не инициализирована и ее значение к моменту первого выполнения оператора в строке 23 не определено. Чтобы узнать, что это за строка, нужно дважды щелкнуть на этом предупреждении. В окне Редактора Кода выделится соответствующая строка:

A*=10000; //Увеличение A в 10000 раз

Следовательно, объявление переменной нужно изменить так:

double A=1;

Чтобы в переменной A накапливался результат при каждом щелчке на кнопке, сделаем ее глобальной.

Перейдем к второму сообщению компилятора:

[C++ Error] Unit1.cpp (24): E2451 Undefined symbol ‘B’

([C++ Ошибка] модуль Unit1.cpp, строка 24: E2451 Необъявленный идентификатор ‘B’)

Это уже сообщение об ошибке. В операторе

Label1->Caption = “A = “ +B;

вместо переменной A указана переменная B, которая не была объявлена. Строка кода с этой ошибкой выделена в окне Редактора Кода, и курсор остановился около необъявленного идентификатора.

Поскольку ошибка неисправима, выполняемый модуль не формируется и приложение не выполняется.

Третье сообщение компилятора:

[C++ Warning] Unit1.cpp (25): W8080 ‘j’ is declared but never used

([C++ Предупреждение] модуль Unit1.cpp, строка 25: W8080 Переменная ‘j’ объявлена, но нигде не используется)

Объявление переменной j как ненужной нужно удалить из текста.

Последнее сообщение компилятора:

[C++ Warning] Unit1.cpp (25): W8057 Parameter ‘Sender’ is never used

([C++ Предупреждение] модуль Unit1.cpp, строка 25: W8057 Параметр ‘Sender’ нигде не используется)

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

Итак, приложение не откомпилировалось из-за ошибки с использованием необъявленной переменной B.

После исправления в ошибочном операторе переменной B на A появится новое сообщение об ошибке:

[C++ Error] Unit1.cpp (24): E2060 Illegal use of floating point

([C++ Ошибка] модуль Unit1.cpp, строка 24: E2060 Недопустимое использование плавающей точки)

В правой части оператора Label1->Caption = “A = “ +A;

складываются строка A = и переменная с плавающей точкой A. Это ошибка использования несовместимых типов.

После всех исправлений код примет вид

double A=1;

void _fastcall TForm1::Button1Click(Tobject *Sender)

{

int i;

for(i=0; i<50;i++)

A*=10000; //Увеличение A в 10000 раз

Label1->Caption = “A = “ + FloatToStr(A);

}

Теперь откомпилируем приложение и выполним его.

 

Действия в случае ошибки выполнения

Щелкнув на кнопке, убедимся, что приложение работает. Однако при повторном щелчке выполнение прерывается. Щелкнув по закладке Unit1.cpp, увидим окно с сообщением отладчика, которое после перевода выглядит так: “Проект Project1.exe вызвал генерацию исключения класса EOverflow с сообщением ‘Переполнение при операции с плавающей запятой’. Процесс остановлен. Используйте команды Step или Run для продолжения”.

Это сообщение об ошибке, приведшей к генерации исключения. Исключения (exceptions) генерируются при различных ошибках – исключительных ситуациях.

Щелкнув на кнопке OK, попадем в окно Редактора Кода и увидим в нем код программы с выделенной строкой, около которой стоит зеленая стрелка. Это тот оператор, при выполнении которого произошла ошибка.





Поделиться с друзьями:


Дата добавления: 2015-10-01; Мы поможем в написании ваших работ!; просмотров: 714 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Слабые люди всю жизнь стараются быть не хуже других. Сильным во что бы то ни стало нужно стать лучше всех. © Борис Акунин
==> читать все изречения...

2240 - | 2159 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.009 с.