logo

Čas prevajanja v primerjavi z izvajanjem

Čas prevajanja in čas izvajanja sta dva programska izraza, ki se uporabljata pri razvoju programske opreme. Čas prevajanja je čas, ko se izvorna koda pretvori v izvršljivo kodo, medtem ko je čas izvajanja čas, ko se začne izvajati izvedljiva koda. Tako čas prevajanja kot čas izvajanja se nanašata na različne vrste napak.

Napake med prevajanjem

Napake med prevajanjem so napake, do katerih je prišlo, ko smo zapisali napačno sintakso. Če zapišemo napačno sintakso ali semantiko katerega koli programskega jezika, bo prevajalnik vrgel napake med prevajanjem. Prevajalnik ne bo dovolil izvajanja programa, dokler iz programa ne bodo odstranjene vse napake. Ko so vse napake odstranjene iz programa, bo prevajalnik ustvaril izvršljivo datoteko.

Napake med prevajanjem so lahko:

  • Sintaksne napake
  • Semantične napake

Sintaksne napake

Če programer ne sledi sintaksi katerega koli programskega jezika, bo prevajalnik izdal sintaktično napako.

na primer

int a, b:

algoritem razvrščanja z združevanjem

Zgornja deklaracija ustvari napako med prevajanjem kot v C, vsak stavek se konča s podpičjem, vendar na koncu stavka postavimo dvopičje (:).

Semantične napake

Semantične napake obstajajo, ko izjave niso pomembne za prevajalnik.

na primer

a+b=c;

Zgornji stavek vrže napake med prevajanjem. V zgornjem stavku dodelimo vrednost 'c' seštevku 'a' in 'b', kar ni mogoče v programskem jeziku C, saj lahko vsebuje samo eno spremenljivko na levi strani operatorja dodelitve, medtem ko desno od operator dodelitve lahko vsebuje več kot eno spremenljivko.

Zgornjo izjavo je mogoče prepisati kot:

c=a+b;

Napake med izvajanjem

Napake med izvajanjem so napake, ki se pojavijo med izvajanjem in po prevajanju. Primeri napak med izvajanjem so deljenje z ničlo itd. Teh napak ni lahko odkriti, saj prevajalnik ne pokaže na te napake.

Raziščimo nekaj tipičnih C vrste napak med izvajanjem, primeri in njihove možne učinke.

Deljenje z ničlo:

Ker je deljenje z ničlo matematično neopredeljivo , ki poskuša deliti celo število z nič vodi do a napaka med izvajanjem . Ta napaka povzroči, da se program zruši ali povzroči izjemo. Tukaj je primer:

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

Izhod:

 Floating point exception (core dumped) 

Pojasnilo:

A 'Izjema s plavajočo vejico' sporočilo o napaki se pojavi, ko program naleti na težavo med izvajanjem zaradi deljenja z nič.

Dostop do polja izven meja:

A napaka med izvajanjem se zgodi, ko se do elementa matrike dostopa izven določenih omejitev. Napaka se zgodi, ko je indeks večji od velikosti polja in so zakoni o dostopu do pomnilnika prekršeni. Tukaj je primer:

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

Izhod:

 Segmentation fault (core dumped) 

Pojasnilo:

primerljiv seznam

Element pri indeks 10 je zunaj meja polja, ko program poskuša dostopati do njega. Kot rezultat, a pride do napake segmentacije in program se konča z napako.

Dereferenca ničelnega kazalca:

A napaka med izvajanjem se zgodi, ko poskušate dostopati do a pomnilnik ničelnega kazalca naslov, ki je znan kot dereferenciranje ničelni kazalec. Dostop do ničelnih kazalcev povzroči nepredvidljivo vedenje, ker ne kažejo na legitimne pomnilniške lokacije . Tukaj je primer:

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

Izhod:

 Segmentation fault (core dumped) 

Pojasnilo:

Poskus, da bi dereferenca rezultat ničelnega kazalca je a segmentacijska napaka , zaradi česar se program zruši s sporočilom o napaki.

Preobremenitev:

A preobremenitev se zgodi, ko se sklad klicev poveča, kot je bilo predvideno, in vsebuje informacije o klicih funkcij. An neskončna rekurzija običajno nastane, ko rekurzivnim funkcijam manjkajo ustrezni zaključni kriteriji. Tukaj je primer:

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

Izhod:

 Segmentation fault (core dumped) 

Pojasnilo:

Program se zažene neskončna rekurzija , ki prepolni sklad in povzroči napako segmentacije.

Neuporabljene spremenljivke:

Ker neinicializirane spremenljivke imajo nedefinirane vrednosti , lahko njihova uporaba povzroči napake med izvajanjem. Program lahko zagotovi presenetljive rezultate ali pa se zruši, odvisno od okoliščin. Tukaj je primer:

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

Izhod:

 Some random value (varies each time) 

Pojasnilo:

V tem primeru je vrednost an neinicializirana spremenljivka je lahko katera koli naključna vrednost, izbrana naključno iz območja pomnilnika, ki je določeno za to spremenljivko.

mylivecricket.in

Oglejmo si razlike med časom prevajanja in časom izvajanja:

Čas prevajanja Runtime
Napake v času prevajanja so napake, ki nastanejo v času prevajanja in jih zazna prevajalnik. Napake med izvajanjem so napake, ki jih ne ustvari prevajalnik in povzročijo nepredvidljiv rezultat v času izvajanja.
V tem primeru prevajalnik prepreči izvajanje kode, če zazna napako v programu. V tem primeru prevajalnik ne zazna napake, zato kodi ne more preprečiti izvedbe.
Vsebuje skladenjske in semantične napake, kot je manjkajoče podpičje na koncu stavka. Vsebuje napake, kot je deljenje z ničlo, določanje kvadratnega korena negativnega števila.

Primer napake med prevajanjem

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

V zgornji kodi smo poskušali natisniti vrednost 'a', vendar vrže napako. Namesto podpičja na koncu stavka postavimo dvopičje, zato ta koda ustvari napako med prevajanjem.

Izhod

Čas prevajanja v primerjavi z izvajanjem

Primer napake med izvajanjem

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

V zgornji kodi poskušamo vrednost 'b' deliti z nič, kar povzroči napako med izvajanjem.

Izhod

Čas prevajanja v primerjavi z izvajanjem

Zaključek:

Skratka, obdobja razvoj programske opreme poznan kot čas prevajanja in napake med izvajanjem so ločeni in vsak ima edinstven niz napake ki se lahko zgodi. Napake med prevajanjem se zgodi, ko se koda med korakom prevajanja pretvori v izvršljivo obliko. Te napake vključujejo pomenske napake , ki proizvajajo nelogično oz absurdna koda , in sintaksne napake , ki so v nasprotju z zakoni programskega jezika. Te napake prepozna prevajalnik in poročal, blokiranje izvedbe kode, dokler niso popravljene.

Po drugi strani, napake med izvajanjem pojavijo, ko se program izvaja in jih prevajalnik ne ujame. Lahko so posledica več pogojev, vključno z deljenje z ničlo, napačen dostop do pomnilnika , ali drugih nepredvidenih dogodkov. Napake med izvajanjem jih je težje odkriti in odpraviti napake, saj pogosto povzročijo zrušitve programa ali nepričakovano vedenje. Za elegantno upravljanje napak med izvajanjem in zagotavljanje stabilnosti programa razvijalci uporabljajo tehnike ravnanja z napakami kot obravnavanje izjem .