Материал: методичка

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

 

D

 

 

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

 

r

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

програма буде запущена(природно, тільки в тому випадку, якщо в програмі

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

m

 

 

w. .

o

помилок).

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

or

e

 

B

Y

 

 

 

 

 

 

m

B

 

 

 

 

 

buy

r

 

 

 

 

 

 

2

 

 

 

 

 

 

 

0

A

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

немає

 

 

m

 

w

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

 

2.10 Помилки

Компілятор переходить до другого етапу генерації виконуваної програми тільки в

тому випадку, якщо початковий текст не містить синтаксичних помилок. В більшості випадків в тільки що набраній програмі є помилки. Програміст повинен їх усунути. Процес усунення помилок носить ітераційний характер. Зазвичай спочатку усуваються

найбільш очевидні помилки, наприклад, оголошуються неоголошені змінні. Після чергового внесення змін до тексту програми виконується повторна компіляція. Слід

звернути увагу на те, що компілятор не завжди може точно локалізувати помилку. Тому, аналізуючи фрагмент програми, який, «на думку» компілятора, містить помилку, потрібно звертати увагу не тільки на той фрагмент коду, на який компілятор встановив

курсор, але і на той, який знаходиться в попередньому рядку. Наприклад, в наступному фрагменті коду:

//обчислити струм

i = u/r

//. вивести результат в полі мітки

Label4->Caption = "Струм : " +

FloatToStrf(i,ffgeneral,7,2)+ " А";

не поставлена крапка з комою після оператора привласнення. Компілятор це

виявляє, виводить повідомлення statement missing ; але виділяє рядок Label4->Caption

="Струм : " + і встановлює курсор після ідентифікатора Label4.

Утаблиці. 2.10 перераховані типові помилки і відповідні ним повідомлення компілятора.

Таблиця 2.10. Типові помилки

Повідомлення

Undefined symbol

(невідомий символ)

Statement missing ;

(відсутня крапка з комою)

Помилка

 

 

 

 

Використовується

неоголошена

змінна

 

Ім'я

змінної, функції або параметра записано невірно.

Наприклад, в програмі оголошена зміннаSummа в

 

інструкціях використовується sum

 

 

 

Після інструкції не поставлена крапка з комою

31

AB

 

 

 

F

 

 

 

D

 

 

Y

P

B

Y

 

 

 

 

 

 

w

Click

 

 

 

w

 

 

 

w.

 

 

 

A

Tran

sf

 

 

 

 

 

 

 

 

 

 

 

 

F

 

 

 

 

 

 

 

 

 

 

 

 

 

D

 

 

 

or

e

 

 

 

 

 

 

Y

P

 

 

 

 

 

m

 

 

 

 

 

B

Y

 

 

 

 

 

 

buy

r

 

 

 

B

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

to

 

 

 

 

.

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Click

 

 

 

 

o

m

Unterminated

string or

 

 

 

 

w

 

 

.

 

 

 

 

 

 

 

w

 

w.

 

BBYY

c

character

constant(незавершена

 

 

 

 

 

 

 

A

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В кінці строкової константи, наприклад, тексту

 

 

 

 

 

строкова

або

символьна

 

повідомлення, немає подвійних лапок

 

 

 

 

 

 

 

 

 

 

 

константа)

 

 

 

 

 

 

 

 

 

 

 

r

 

 

 

T ansf

 

 

 

 

or

 

 

 

 

m

 

 

 

 

e

 

 

 

buy

r

 

 

 

0

 

 

 

 

2

 

 

to

 

.

 

here

 

 

 

 

 

m

 

 

 

 

 

 

 

o

 

 

 

.c

 

B BYY

 

) expected

(очікується

 

При записі арифметичного виразу, що містить

 

 

дужки,

порушений

баланс

відкриваючих

 

закриваюча дужка)

 

 

закриваючих дужок

 

 

 

 

 

 

 

 

 

if statement missing ( (у

інструкції if немає відкриваючої

дужки)

Compound statement missing }

У інструкції if умова не поміщена в дужки

Порушений баланс відкриваючих і закриваючих

фігурних дужок. Ймовірно, не поставлена закриваюча фігурна дужка що відзначає кінець функції або групи

інструкцій, наприклад, після умови або словаelse у інструкції if

Extra parameter

in call

 

Невірно записана інструкція виклику функції,

 

to(зайвий параметр при

виклику

 

 

вказаний зайвий параметр

функції)

 

 

 

 

Якщо компілятор виявив достатньо багато помилок, то проглянете всі повідомлення і усунете спочатку найбільш очевидні помилки і виконаєте повторну компіляцію. Цілком імовірно, що після цього кількість помилок значно зменшиться. Це

пояснюється особливостями синтаксису мови, коли одна незначна помилка може

"тягнути" за собою досить велику кількість інших.

2.11 Попередження і підказки

При виявленні в програмі неточностей, які не є помилками, компілятор виводить

підказки (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.

 

Не

привласнено початкове

значення

 

 

 

(ймовірно,

використовується

 

 

 

 

 

змінної

 

 

 

 

 

 

 

 

неініціалізована змінна)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

32

 

 

 

 

 

 

F Tran

sf

 

 

 

 

 

 

D

 

 

 

 

 

 

Y

P

 

 

 

 

or

e

 

B

Y

 

 

 

 

 

 

 

m

B

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

A

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

here

 

 

 

 

 

 

 

 

Click

 

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

 

.

 

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

 

2.12 Компоновка

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

Якщо в програмі немає помилок, то можна виконати компоновку. Для цього треба в меню Compile вибрати команду Make або Build. Різниця між командами Make і Build

полягає в наступному. Команда Make забезпечує компоновку файлів проекту, а команда Build — примусову перекомпіляцію, а потім — компоновку.

На етапі компоновки також можуть виникнути помилки. Найчастіше причина помилок під час компоновки полягає в недоступності файлів бібліотек або інших

модулів, що раніше відкомпілювалися. Усуваються ці помилки шляхом налаштування середовища розробки і включенням в проект бракуючих модулів. У простих проектах помилки часу компіляції, як правило, не виникають.

2.13 Запуск програми

Пробний запуск програми можна виконати безпосередньо з середовищ розробки, не завершуючи роботу з C++ Builder. Для цього потрібно в меню Run вибрати команду Run або клацнути на командній кнопці Run (мал. 2.33).

Мал. 2.33. Запуск програми з середовища розробки

2.14 Помилки часу виконання

Під час роботи додатки можуть виникати помилки, які називаються помилками

часу виконання (run time errors) або виключеннями (exceptions). В більшості випадків

причинами виключень є невірні початкові дані.

Наприклад, якщо під час роботи програми обчислення сили струму в полі Напругу ввести ю.5, тобто розділити цілу і дробову частину крапкою, то в результаті

клацання на кнопці Обчислити на екрані з'явиться вікно з повідомленням про помилку

(мал. 2.34).

33

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

Мал. 2.34. Приклад вікна з повідомленням про помилку часу виконання (програма запущена з Windows)

Причина виникнення помилки в наступному. У тексті програми дробова частина числа від цілої відділяється крапкою. При введенні даних в полі редагування користувач може відокремити дробову частину числа цілою крапкою або комою. Який з

цих двох символів є правильним, залежить від налаштування Windows.

Якщо в налаштуванніWindows вказане, що роздільник цілої і дробової частин числа — кома (для Росії це стандартна установка), а користувач використовував крапку

(ввів в поле Напругу (Edit1) рядок10.5), то при виконанні інструкції

u = StrToFloat(Editl->Text);

виникне виключення, оскільки при вказаному налаштуванніWindows вміст поля редагування і, отже, аргумент функції Strtofloat не є зображенням дробового числа.

Якщо програма запущена з середовища розробки, то при виникненні виключення виконання програми припиняється і на екрані з'являється вікно з повідомленням про

помилку і її тип. Як приклад на мал. 2.35 приведено вікно повідомлення про виникнення

виключення, причина якого полягає в тому, що рядок, введений користувачем в полі редагування, не є дробовим числом.

Мал.

2.35. Приклад повідомлення про

виникнення

виключення(програма

запущена з C++ Builder)

 

 

Після

виникнення виключення і клацання

на кнопці

ОК у діалоговому вікн

Debugger Exception Notification (мал. 2.35) виконання програми можна перервати або,

не дивлячись на виниклу помилку, продовжити. Щоб перервати виконання програми,

треба в меню Run вибрати команду Program Reset щоб продовжити — команду Step Over.

Обробку виключень бере на себе код, що автоматично додається у виконувану

програму, який забезпечує, зокрема, і виведення інформаційного повідомлення. Разом з тим C++ Builder дає можливість програмі самій виконати обробку виключення.

34

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A BBYY

c

 

 

 

 

 

 

 

 

Інструкція обробки виключення виглядає так:

try

{

// тут інструкції, виконання яких може викликати виключення

}

catch ( Тип &е)

{

// тут інструкції обробки виключення

}

де:

AB

 

 

 

 

 

F Tran

sf

 

 

 

 

 

D

 

 

 

 

 

Y

P

 

 

 

 

or

e

B

Y

 

 

 

 

 

 

 

m

 

 

 

 

 

 

buy

r

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

to

 

 

.

 

 

 

 

 

 

here

 

 

 

 

 

 

 

Click

 

 

 

 

w

 

 

 

 

 

m

 

 

 

 

 

 

 

 

 

w

w.

 

 

 

 

o

 

 

 

 

 

 

 

.

 

 

 

 

 

 

A B BYY

c

 

 

 

 

 

 

 

 

§try — ключове слово, що позначає, що далі слідують інструкції, при виконанні яких можливе виникнення виключень, і що обробку цих виключень бере на себе програма;

§catch — ключове слово, що позначає початок секції обробки виключення.

Інструкції цієї секції будуть виконані, якщо в програмі виникне виключення вказаного типу.

Основною характеристикою виключення є його тип. У таблиці. 2.12 перераховані найбільш часто виникаючі виключення і вказані причини, які можуть привести до їх

виникнення.

Таблиця 2.12. Типові виключення

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Виключення

 

 

 

Виникає

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EConvertError

 

 

При виконанні перетворення, якщо перетворювана

 

 

 

 

величина не може бути приведена до необхідного типу.

 

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

 

 

Найчастіше виникає при перетворенні рядка символів в

 

 

 

 

 

число

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EDivByZero

 

 

При

виконанні

операції

цілочисельного

ділення,

 

цілочисельне

ділення

 

 

на

 

нуль

 

 

 

якщо дільник дорівнює нулю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EZeroDivide

 

 

При

виконанні

операції

ділення над

дробовими

 

ділення на нуль

 

 

 

операндами, якщо дільник дорівнює нулю

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

При

виконанні

файлових

операцій. Найбільш

 

 

 

EInOutError

 

частою причиною є відсутність необхідного файлу або, у

 

 

 

помилка введення/виводу

 

 

разі використання змінного диска, відсутність диска

в

 

 

 

 

 

накопичувачі

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

35