logo

Temps de compilació vs temps d'execució

Temps de compilació i temps d'execució són els dos termes de programació utilitzats en el desenvolupament de programari. El temps de compilació és el moment en què el codi font es converteix en un codi executable mentre que el temps d'execució és el moment en què s'inicia l'execució del codi executable. Tant el temps de compilació com el temps d'execució fan referència a diferents tipus d'error.

Errors en temps de compilació

Els errors en temps de compilació són els errors que es van produir quan escrivim la sintaxi incorrecta. Si escrivim la sintaxi o la semàntica incorrecta de qualsevol llenguatge de programació, aleshores els errors en temps de compilació seran llançats pel compilador. El compilador no permetrà executar el programa fins que s'eliminin tots els errors del programa. Quan s'eliminin tots els errors del programa, el compilador generarà el fitxer executable.

herència java

Els errors en temps de compilació poden ser:

  • Errors de sintaxi
  • Errors semàntics

Errors de sintaxi

Quan el programador no segueix la sintaxi de cap llenguatge de programació, el compilador llançarà l'error de sintaxi.

Per exemple,

int a, b:

La declaració anterior genera l'error en temps de compilació com en C, cada instrucció acaba amb el punt i coma, però posem dos punts (:) al final de la declaració.

Errors semàntics

Els errors semàntics existeixen quan les declaracions no són significatives per al compilador.

Per exemple,

a+b=c;

La declaració anterior genera errors en temps de compilació. A la declaració anterior, estem assignant el valor de 'c' a la suma de 'a' i 'b', que no és possible en el llenguatge de programació C, ja que només pot contenir una variable a l'esquerra de l'operador d'assignació mentre que a la dreta de l'operador d'assignació pot contenir més d'una variable.

La declaració anterior es pot tornar a escriure com:

c=a+b;

Errors de temps d'execució

Els errors d'execució són els errors que es produeixen durant l'execució i després de la compilació. Els exemples d'errors d'execució són la divisió per zero, etc. Aquests errors no són fàcils de detectar ja que el compilador no apunta a aquests errors.

Explorem alguns dels típics C tipus d'error en temps d'execució, casos , i els seus possibles efectes.

Divisió per zero:

Com que la divisió per zero és matemàticament indefinible , intentant dividir un nombre enter per zero condueix a a error d'execució . Aquest error fa que el programa es bloquegi o produeixi una excepció. Aquí teniu un exemple:

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

Sortida:

 Floating point exception (core dumped) 

Explicació:

imatge com a fons en css

A 'Excepció de coma flotant' El missatge d'error es produeix quan el programa troba un problema d'execució a causa de la divisió per zero.

Accés a matriu fora de límits:

A error d'execució es produeix quan s'accedeix a un element de matriu fora de determinats límits. Es produeix un error quan un índex és més gran que la mida de la matriu i les lleis d'accés a la memòria es trenquen. Aquí teniu un exemple:

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

Sortida:

 Segmentation fault (core dumped) 

Explicació:

L'element a índex 10 està més enllà dels límits de la matriu quan el programa intenta accedir-hi. Com a resultat, a es produeix un error de segmentació , i el programa acaba amb un error.

Desreferència del punter nul:

A error d'execució passa quan intenteu accedir a a memòria del punter nul adreça, que es coneix com desreferenciació un punter nul. L'accés a punters nuls provoca un comportament impredictible perquè no apunten ubicacions de memòria legítimes . Aquí teniu un exemple:

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

Sortida:

 Segmentation fault (core dumped) 

Explicació:

L'intent de desreferència un punter nul dóna com a resultat a falla de segmentació , que fa que el programa es bloquegi amb un missatge d'error.

Desbordament de pila:

A desbordament de pila succeeix quan la pila de trucades creix més del previst, que conté informació sobre les trucades de funcions. An recursivitat infinita generalment resulta quan les funcions recursives no tenen criteris de terminació adequats. Aquí teniu un exemple:

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

Sortida:

 Segmentation fault (core dumped) 

Explicació:

El programa comença un recursivitat sense fi , que desborda la pila i provoca un error de segmentació.

desavantatges de la banca en línia

Variables no utilitzades:

Perquè variables no inicialitzades tenir valors indefinits , utilitzar-los pot provocar errors d'execució. El programa podria proporcionar resultats sorprenents o fallar, depenent de les circumstàncies. Aquí teniu un exemple:

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

Sortida:

 Some random value (varies each time) 

Explicació:

En aquest exemple, el valor d'an variable no inicialitzada pot ser qualsevol valor aleatori escollit aleatòriament de la regió de memòria designada per a aquesta variable.

Vegem les diferències entre temps de compilació i temps d'execució:

Temps de compilació Temps d'execució
Els errors en temps de compilació són els errors que es produeixen en temps de compilació i el compilador els detecta. Els errors d'execució són els errors que no són generats pel compilador i produeixen un resultat impredictible en el moment de l'execució.
En aquest cas, el compilador impedeix l'execució del codi si detecta un error al programa. En aquest cas, el compilador no detecta l'error, de manera que no pot impedir l'execució del codi.
Conté els errors de sintaxi i semàntics com la falta de punt i coma al final de la sentència. Conté els errors com la divisió per zero, determinant l'arrel quadrada d'un nombre negatiu.

Exemple d'error en temps de compilació

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

Al codi anterior, hem intentat imprimir el valor de 'a', però genera un error. Posem els dos punts al final de la instrucció en lloc d'un punt i coma, de manera que aquest codi genera un error en temps de compilació.

Sortida

Temps de compilació vs temps d'execució

Exemple d'error en temps d'execució

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

Al codi anterior, intentem dividir el valor de 'b' per zero, i això genera un error d'execució.

Sortida

Temps de compilació vs temps d'execució

Conclusió:

En conclusió, els períodes de desenvolupament de software conegut com temps de compilació i errors de temps d'execució estan separades i cadascuna té un conjunt únic faltes això podria passar. Errors en temps de compilació succeeix quan el codi es converteix en forma executable durant el pas de compilació. Aquests errors inclouen errors semàntics , que produeixen il·lògic o codi absurd , i errors de sintaxi , que van en contra de les lleis del llenguatge de programació. Aquests errors s'identifiquen amb el compilador i informat, bloquejant l'execució del codi fins que es solucionin.

Per altra banda, errors de temps d'execució es produeixen quan un programa s'està executant i no són capturats pel compilador. Poden derivar de diverses condicions, entre elles divisió per zero, accés erroni a la memòria , o altres imprevistos. Errors de temps d'execució són més difícils de descobrir i depurar, ja que sovint produeixen errors del programa o comportaments inesperats. Per gestionar amb elegància els errors d'execució i garantir l'estabilitat del programa, els desenvolupadors utilitzen tècniques de gestió d'errors M'agrada maneig d'excepcions .