logo

Час компіляції проти середовища виконання

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

Помилки під час компіляції

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

Помилки під час компіляції можуть бути такими:

  • Синтаксичні помилки
  • Смислові помилки

Синтаксичні помилки

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

як дізнатися розмір монітора

Наприклад,

int a, b:

Наведене вище оголошення генерує помилку під час компіляції, як у C, кожен оператор закінчується крапкою з комою, але ми ставимо двокрапку (:) у кінці оператора.

Смислові помилки

Семантичні помилки існують, коли оператори не мають сенсу для компілятора.

Наприклад,

a+b=c;

Наведений вище оператор викликає помилки під час компіляції. У наведеному вище твердженні ми присвоюємо значення «c» сумі «a» і «b», що неможливо в мові програмування C, оскільки вона може містити лише одну змінну ліворуч від оператора присвоювання, а праворуч від оператор присвоєння може містити більше однієї змінної.

Наведене вище твердження можна переписати так:

c=a+b;

Помилки виконання

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

Давайте розглянемо кілька типових C типи помилок виконання, випадки та їх можливі наслідки.

Ділення на нуль:

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

hashset проти hashmap
 #include int main() { int a = 10; int b = 0; int result = a / b; // Division by zero printf('Result: %d
', result); return 0; } 

Вихід:

 Floating point exception (core dumped) 

Пояснення:

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

масив повернення java

Доступ до масиву поза межами:

А Помилка виконання виникає, коли доступ до елемента масиву виходить за певні межі. Помилка виникає, коли індекс перевищує розмір масиву, і закони доступу до пам’яті порушуються. Ось приклад:

 #include int main() { int arr[5] = {1, 2, 3, 4, 5}; int index = 10; int value = arr[index]; // Accessing array out of bounds printf('Value: %d
', value); return 0; } 

Вихід:

 Segmentation fault (core dumped) 

Пояснення:

Елемент при індекс 10 знаходиться за межами масиву, коли програма намагається отримати до нього доступ. В результаті а виникає помилка сегментації , і програма завершується з помилкою.

Розіменування нульового покажчика:

А Помилка виконання відбувається, коли ви намагаєтеся отримати доступ до a пам'ять нульового покажчика адреса, яка відома як розіменування нульовий покажчик. Доступ до нульових покажчиків призводить до непередбачуваної поведінки, оскільки вони не вказують на законні місця пам'яті . Ось приклад:

 #include int main() { int* ptr = NULL; // Null pointer int value = *ptr; // Null pointer dereference printf('Value: %d
', value); return 0; } 

Вихід:

 Segmentation fault (core dumped) 

Пояснення:

java колекції java

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

Переповнення стека:

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

 #include void recursiveFunction() { recursiveFunction(); // Recursive call without termination condition } int main() { recursiveFunction(); return 0; } 

Вихід:

 Segmentation fault (core dumped) 

Пояснення:

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

Невикористані змінні:

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

 #include int main() { int uninitializedVariable; printf('Value: %d
', uninitializedVariable); // Using uninitialized variable return 0; } 

Вихід:

намагаючись внутр
 Some random value (varies each time) 

Пояснення:

У цьому прикладі значення an неініціалізована змінна може бути будь-яким випадковим значенням, вибраним випадковим чином з області пам’яті, призначеної для цієї змінної.

Давайте розглянемо відмінності між часом компіляції та часом виконання:

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

Приклад помилки під час компіляції

 #include int main() { int a=20; printf('The value of a is : %d',a): return 0; } 

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

Вихід

Час компіляції проти середовища виконання

Приклад помилки виконання

 #include int main() { int a=20; int b=a/0; // division by zero printf('The value of b is : %d',b): return 0; } 

У наведеному вище коді ми намагаємося поділити значення 'b' на нуль, і це викликає помилку виконання.

Вихід

Час компіляції проти середовища виконання

висновок:

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

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