logo

Kompilēšanas laiks pret izpildlaiku

Kompilēšanas laiks un izpildlaiks ir divi programmēšanas termini, ko izmanto programmatūras izstrādē. Kompilēšanas laiks ir laiks, kurā avota kods tiek pārveidots izpildāmā kodā, savukārt izpildes laiks ir laiks, kurā tiek sākta izpildāmā koda darbība. Gan kompilēšanas laiks, gan izpildlaiks attiecas uz dažādiem kļūdu veidiem.

Kompilēšanas laika kļūdas

Kompilēšanas laika kļūdas ir kļūdas, kas radās, rakstot nepareizu sintaksi. Ja mēs rakstām nepareizu jebkuras programmēšanas valodas sintaksi vai semantiku, kompilators izmetīs kompilēšanas laika kļūdas. Kompilators neļaus palaist programmu, kamēr no programmas nav noņemtas visas kļūdas. Kad visas kļūdas tiek noņemtas no programmas, kompilators ģenerēs izpildāmo failu.

Kompilēšanas laika kļūdas var būt:

  • Sintakses kļūdas
  • Semantiskās kļūdas

Sintakses kļūdas

Ja programmētājs neievēro nevienas programmēšanas valodas sintaksi, kompilators izmet sintakses kļūdu.

Piemēram,

int a, b:

Iepriekš minētā deklarācija ģenerē kompilēšanas laika kļūdu, tāpat kā C, katrs priekšraksts beidzas ar semikolu, bet priekšraksta beigās ievietojam kolu (:).

Semantiskās kļūdas

Semantiskās kļūdas pastāv, ja paziņojumi kompilatoram nav nozīmīgi.

Piemēram,

a+b=c;

Iepriekš minētais paziņojums rada kompilēšanas laika kļūdas. Iepriekš minētajā paziņojumā mēs piešķiram “c” vērtību “a” un “b” summēšanai, kas nav iespējama C programmēšanas valodā, jo tā var saturēt tikai vienu mainīgo pa kreisi no piešķiršanas operatora, bet pa labi no piešķiršanas operators var saturēt vairāk nekā vienu mainīgo.

sapludināt kārtot java

Iepriekš minēto paziņojumu var pārrakstīt šādi:

c=a+b;

Izpildlaika kļūdas

Izpildlaika kļūdas ir kļūdas, kas rodas izpildes laikā un pēc kompilācijas. Izpildlaika kļūdu piemēri ir dalīšana ar nulli utt. Šīs kļūdas nav viegli atklāt, jo kompilators nenorāda uz šīm kļūdām.

Izpētīsim dažus tipiskus C izpildlaika kļūdu veidi, gadījumi un to iespējamā ietekme.

Dalījums ar nulli:

Tā kā dalīšana ar nulli ir matemātiski nenosakāms , mēģinot dalīt veselu skaitli ar nulle noved pie a izpildlaika kļūda . Šīs kļūdas dēļ programma avarē vai rada izņēmumu. Šeit ir piemērs:

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

Izvade:

 Floating point exception (core dumped) 

Paskaidrojums:

A 'peldošā komata izņēmums' kļūdas ziņojums tiek parādīts, kad programma saskaras ar izpildlaika problēmu, jo dalīšana ar nulli.

Piekļuve masīvam ārpus robežām:

A izpildlaika kļūda rodas, ja masīva elementam tiek piekļūts ārpus noteiktiem ierobežojumiem. Kļūda rodas, ja indekss ir lielāks par masīva lielumu un tiek pārkāpti atmiņas piekļuves likumi. Šeit ir piemērs:

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

Izvade:

 Segmentation fault (core dumped) 

Paskaidrojums:

Elements plkst indekss 10 ir ārpus masīva robežām, kad programma mēģina tam piekļūt. Rezultātā a rodas segmentācijas kļūda , un programma beidzas ar kļūdu.

Nulles rādītāja atsauce:

A izpildlaika kļūda notiek, mēģinot piekļūt a nulles rādītāja atmiņa adrese, kas ir pazīstama kā atsauces atcelšana nulles rādītājs. Piekļuve nulles rādītājiem izraisa neparedzamu uzvedību, jo tie nenorāda uz likumīgas atmiņas vietas . Šeit ir piemērs:

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

Izvade:

 Segmentation fault (core dumped) 

Paskaidrojums:

Mēģinājums uz atsauci nulles rādītājs rada a segmentācijas kļūda , kas izraisa programmas avāriju, parādot kļūdas ziņojumu.

java virkne satur

Stack Overflow:

A skursteņa pārplūde notiek, kad zvanu kaudze kļūst lielāka, nekā paredzēts, un tajā ir informācija par funkciju izsaukumiem. An bezgalīga rekursija parasti rodas, ja rekursīvajām funkcijām trūkst atbilstošu beigu kritēriju. Šeit ir piemērs:

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

Izvade:

 Segmentation fault (core dumped) 

Paskaidrojums:

Programma tiek startēta bezgalīga rekursija , kas pārpilda steku un izraisa segmentācijas kļūdu.

Neizmantotie mainīgie:

Jo neinicializēti mainīgie ir nenoteiktas vērtības , to izmantošana var izraisīt izpildlaika kļūdas. Programma var nodrošināt pārsteidzošus rezultātus vai avāriju atkarībā no apstākļiem. Šeit ir piemērs:

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

Izvade:

 Some random value (varies each time) 

Paskaidrojums:

Šajā piemērā an vērtība neinicializēts mainīgais var būt jebkura nejauša vērtība, kas nejauši izvēlēta no šim mainīgajam norādītā atmiņas reģiona.

Apskatīsim atšķirības starp kompilēšanas laiku un izpildlaiku:

Kompilēšanas laiks Izpildes laiks
Kompilēšanas laika kļūdas ir kļūdas, kas tiek radītas kompilēšanas laikā, un tās atklāj kompilators. Izpildlaika kļūdas ir kļūdas, kuras neģenerē kompilators un kuras izpildes laikā rada neparedzamu rezultātu.
Šajā gadījumā kompilators neļauj koda izpildei, ja tas programmā atklāj kļūdu. Šajā gadījumā kompilators neatklāj kļūdu, tāpēc tas nevar novērst koda izpildi.
Tajā ir sintakse un semantiskās kļūdas, piemēram, priekšraksta beigās trūkst semikola. Tajā ir tādas kļūdas kā dalīšana ar nulli, nosakot negatīva skaitļa kvadrātsakni.

Kompilēšanas laika kļūdas piemērs

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

Iepriekš minētajā kodā mēs esam mēģinājuši izdrukāt “a” vērtību, taču tas rada kļūdu. Mēs ievietojam kolu priekšraksta beigās, nevis semikolu, tāpēc šis kods ģenerē kompilēšanas laika kļūdu.

Izvade

Kompilēšanas laiks pret izpildlaiku

Izpildlaika kļūdas piemērs

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

Iepriekš minētajā kodā mēs cenšamies dalīt “b” vērtību ar nulli, un tas rada izpildlaika kļūdu.

Izvade

Kompilēšanas laiks pret izpildlaiku

Secinājums:

Noslēgumā jāsaka, ka periodi programmatūras izstrāde zināms kā kompilēšanas laiks un izpildlaika kļūdas ir atsevišķi, un katram ir unikāls komplekts kļūdas kas varētu rasties. Kompilēšanas laika kļūdas notiek, kad kods tiek pārveidots izpildāmā formā kompilācijas soļa laikā. Šīs kļūdas ietver semantiskās kļūdas , kas ražo neloģiski vai absurds kods , un sintakses kļūdas , kas ir pretrunā ar programmēšanas valodas likumiem. Šīs kļūdas identificē ar kompilators un ziņoja, izpildes bloķēšana no koda, līdz tie tiek novērsti.

No otras puses, izpildlaika kļūdas rodas, kad programma darbojas, un kompilators tos neuztver. Tos var izraisīt vairāki apstākļi, tostarp dalīšana ar nulli, kļūdaina piekļuve atmiņai , vai citi neparedzēti notikumi. Izpildlaika kļūdas ir grūtāk atklāt un atkļūdot, jo tie bieži izraisa programmas avārijas vai neparedzētu darbību. Izstrādātāji izmanto, lai eleganti pārvaldītu izpildlaika kļūdas un garantētu programmas stabilitāti kļūdu apstrādes metodes patīk izņēmumu apstrāde .