logo

Čas kompilácie vs

Compile-time a Runtime sú dva programovacie termíny používané pri vývoji softvéru. Čas kompilácie je čas, v ktorom sa zdrojový kód skonvertuje na spustiteľný kód, zatiaľ čo čas spustenia je čas, v ktorom sa spustí spustiteľný kód. Čas kompilácie aj čas spustenia odkazujú na rôzne typy chýb.

Chyby v čase kompilácie

Chyby v čase kompilácie sú chyby, ktoré sa vyskytli, keď napíšeme nesprávnu syntax. Ak napíšeme nesprávnu syntax alebo sémantiku akéhokoľvek programovacieho jazyka, potom kompilátor vyvolá chyby počas kompilácie. Kompilátor nedovolí spustiť program, kým sa z programu neodstránia všetky chyby. Keď sú z programu odstránené všetky chyby, kompilátor vygeneruje spustiteľný súbor.

Chyby pri kompilácii môžu byť:

  • Syntaktické chyby
  • Sémantické chyby

Syntaktické chyby

Keď programátor nedodrží syntax žiadneho programovacieho jazyka, kompilátor vyvolá chybu syntaxe.

Napríklad,

int a, b:

t flip flop

Vyššie uvedená deklarácia generuje chybu pri kompilácii ako v C, každý príkaz končí bodkočiarkou, ale na koniec príkazu vložíme dvojbodku (:).

Sémantické chyby

Sémantické chyby existujú, keď príkazy nemajú pre kompilátor zmysel.

Napríklad,

a+b=c;

Vyššie uvedené vyhlásenie vyvoláva chyby pri kompilácii. Vo vyššie uvedenom vyhlásení priraďujeme hodnotu „c“ súčtu „a“ a „b“, čo nie je možné v programovacom jazyku C, pretože môže obsahovať iba jednu premennú naľavo od operátora priradenia, zatiaľ čo napravo od operátor priradenia môže obsahovať viac ako jednu premennú.

Vyššie uvedené vyhlásenie možno prepísať takto:

c=a+b;

Runtime chyby

Runtime chyby sú chyby, ktoré sa vyskytujú počas vykonávania a po kompilácii. Príklady runtime chýb sú delené nulou atď. Tieto chyby nie je ľahké odhaliť, pretože kompilátor na tieto chyby neupozorňuje.

Poďme preskúmať niektoré typické C typy chýb pri behu, prípady a ich možné účinky.

Delenie nulou:

Keďže delenie nulou je matematicky nedefinovateľné , ktorý sa pokúša deliť celé číslo číslom nula vedie k a runtime error . Táto chyba spôsobí zlyhanie programu alebo vytvorenie výnimky. Tu je príklad:

 #include int main() { int a = 10; int b = 0; int result = a / b; // Division by zero printf('Result: %d
', result); return 0; } 

Výkon:

 Floating point exception (core dumped) 

Vysvetlenie:

A „Výnimka s pohyblivou rádovou čiarkou“ chybové hlásenie sa zobrazí, keď program narazí na problém pri behu kvôli deleniu nulou.

Prístup k poli mimo hraníc:

A runtime error nastane, keď sa k prvku poľa pristúpi mimo určitých limitov. Chyba nastane, keď je index väčší ako veľkosť poľa a sú porušené zákony o prístupe do pamäte. Tu je príklad:

 #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; } 

Výkon:

spracovanie výnimiek v jazyku Java
 Segmentation fault (core dumped) 

Vysvetlenie:

Prvok pri index 10 je za hranicami poľa, keď sa k nemu program pokúša pristupovať. V dôsledku toho a dochádza k poruche segmentácie a program skončí s chybou.

Dereference nulového ukazovateľa:

A runtime error sa stane, keď sa pokúsite získať prístup k a pamäť nulového ukazovateľa adresu, ktorá je známa ako dereferencovanie nulový ukazovateľ. Prístup k nulovým ukazovateľom vedie k nepredvídateľnému správaniu, pretože neukazujú na legitímne miesta v pamäti . Tu je príklad:

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

Výkon:

 Segmentation fault (core dumped) 

Vysvetlenie:

Pokus o to dereferencia nulový ukazovateľ vedie k a chyba segmentácie , čo spôsobí zlyhanie programu s chybovým hlásením.

Pretečenie zásobníka:

A pretečenie zásobníka sa stane, keď sa zásobník hovorov zväčší, ako bolo zamýšľané, a obsahuje informácie o volaniach funkcií. An nekonečná rekurzia zvyčajne dochádza, keď rekurzívnym funkciám chýbajú vhodné ukončovacie kritériá. Tu je príklad:

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

Výkon:

reťazcový formát v jazyku Java
 Segmentation fault (core dumped) 

Vysvetlenie:

Program sa spustí a nekonečná rekurzia , ktorý pretečie zásobník a spôsobí poruchu segmentácie.

Nepoužité premenné:

Pretože neinicializované premenné mať nedefinované hodnoty , ich použitie môže viesť k chybám pri spustení. Program môže poskytnúť prekvapivé výsledky alebo zlyhať v závislosti od okolností. Tu je príklad:

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

Výkon:

 Some random value (varies each time) 

Vysvetlenie:

V tomto príklade je hodnota an neinicializovaná premenná môže byť ľubovoľná náhodne vybraná hodnota z pamäťovej oblasti určenej pre túto premennú.

Pozrime sa na rozdiely medzi časom kompilácie a runtime:

Čas kompilácie Beh programu
Chyby v čase kompilácie sú chyby, ktoré vznikajú v čase kompilácie a sú detekované kompilátorom. Runtime chyby sú chyby, ktoré nie sú generované kompilátorom a vytvárajú nepredvídateľný výsledok v čase vykonávania.
V tomto prípade kompilátor zabráni vykonaniu kódu, ak zistí chybu v programe. V tomto prípade kompilátor nezistí chybu, takže nemôže zabrániť spusteniu kódu.
Obsahuje syntaktické a sémantické chyby, ako napríklad chýbajúcu bodkočiarku na konci príkazu. Obsahuje chyby, ako je delenie nulou, určenie druhej odmocniny záporného čísla.

Príklad chyby pri kompilácii

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

Vo vyššie uvedenom kóde sme sa pokúsili vytlačiť hodnotu 'a', ale vyhodí to chybu. Dvojbodku umiestnime na koniec príkazu namiesto bodkočiarky, takže tento kód generuje chybu počas kompilácie.

Výkon

Čas kompilácie vs

Príklad chyby pri spustení

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

Vo vyššie uvedenom kóde sa snažíme vydeliť hodnotu 'b' nulou a to spôsobí chybu behu.

Výkon

Čas kompilácie vs

Záver:

Na záver obdobia o vývoj softvéru známy ako kompilačný čas a runtime chyby sú samostatné a každý má svoj jedinečný súbor chyby že sa to môže stať. Chyby v čase kompilácie sa stane, keď sa kód prevedie do spustiteľnej formy počas kroku kompilácie. Tieto chyby zahŕňajú sémantické chyby , ktoré vyrábajú nelogické alebo absurdný kódex , a syntaktické chyby , ktoré sú v rozpore so zákonmi programovacieho jazyka. Tieto chyby sú identifikované pomocou kompilátor a nahlásené, zablokovanie exekúcie kódu, kým nebudú opravené.

java reťazce

Na druhej strane, runtime chyby sa vyskytujú, keď je program spustený a kompilátor ich nezachytí. Môžu vyplývať z niekoľkých podmienok, vrátane delenie nulou, chybný prístup do pamäte alebo iné nepredvídané udalosti. Runtime chyby je ťažšie nájsť a ladiť, pretože často vedú k zlyhaniu programu alebo neočakávanému správaniu. Vývojári používajú na elegantnú správu runtime chýb a zaručenie stability programu techniky odstraňovania chýb Páči sa mi to spracovanie výnimiek .