Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РАБ_C++BUILDER.doc
Скачиваний:
100
Добавлен:
02.06.2015
Размер:
7.07 Mб
Скачать

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

На примере простого приложения с ошибочными операторами выясним какие сообщения об ошибках и какие предупреждения выдает компилятор Начните новое приложение перенесите на форму метку 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);

}

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