logo

Tiempo de compilación vs tiempo de ejecución

Tiempo de compilación y tiempo de ejecución son los dos términos de programación utilizados en el desarrollo de software. El tiempo de compilación es el momento en el que el código fuente se convierte en un código ejecutable, mientras que el tiempo de ejecución es el momento en que el código ejecutable comienza a ejecutarse. Tanto el tiempo de compilación como el tiempo de ejecución se refieren a diferentes tipos de errores.

Errores en tiempo de compilación

Los errores en tiempo de compilación son los errores que ocurrieron cuando escribimos la sintaxis incorrecta. Si escribimos la sintaxis o semántica incorrecta de cualquier lenguaje de programación, el compilador generará errores en tiempo de compilación. El compilador no permitirá ejecutar el programa hasta que se eliminen todos los errores del programa. Cuando se eliminen todos los errores del programa, el compilador generará el archivo ejecutable.

Los errores en tiempo de compilación pueden ser:

  • Errores de sintaxis
  • Errores semánticos

Errores de sintaxis

Cuando el programador no sigue la sintaxis de ningún lenguaje de programación, el compilador arrojará el error de sintaxis.

Por ejemplo,

ent a, b:

La declaración anterior genera el error en tiempo de compilación como en C, cada declaración termina con punto y coma, pero ponemos dos puntos (:) al final de la declaración.

Errores semánticos

Los errores semánticos existen cuando las declaraciones no tienen significado para el compilador.

Por ejemplo,

¿Qué es el altavoz?

a+b=c;

La declaración anterior arroja errores en tiempo de compilación. En la declaración anterior, asignamos el valor de 'c' a la suma de 'a' y 'b', lo cual no es posible en el lenguaje de programación C ya que solo puede contener una variable a la izquierda del operador de asignación, mientras que a la derecha de el operador de asignación puede contener más de una variable.

La declaración anterior se puede reescribir como:

c=a+b;

Errores de tiempo de ejecución

Los errores de tiempo de ejecución son los errores que ocurren durante la ejecución y después de la compilación. Los ejemplos de errores de tiempo de ejecución son la división por cero, etc. Estos errores no son fáciles de detectar ya que el compilador no señala estos errores.

Exploremos algo de C típico tipos de errores de tiempo de ejecución, casos y sus posibles efectos.

División por cero:

Como la división por cero es matemáticamente indefinible , intentando dividir un número entero por cero conduce a un Error de tiempo de ejecución . Este error hace que el programa falle o produzca una excepción. He aquí un ejemplo:

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

Producción:

 Floating point exception (core dumped) 

Explicación:

A 'Excepción de punto flotante' Se produce un mensaje de error cuando el programa encuentra un problema de tiempo de ejecución debido a la división por cero.

Accediendo a la matriz fuera de límites:

A Error de tiempo de ejecución Ocurre cuando se accede a un elemento de la matriz fuera de ciertos límites. Se produce un error cuando un índice es mayor que el tamaño de la matriz y se infringen las leyes de acceso a la memoria. He aquí un ejemplo:

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

Producción:

 Segmentation fault (core dumped) 

Explicación:

El elemento en índice 10 está más allá de los límites de la matriz cuando el programa intenta acceder a ella. Como resultado, un ocurre una falla de segmentación , y el programa finaliza con un error.

Desreferencia de puntero nulo:

A Error de tiempo de ejecución sucede cuando intentas acceder a un memoria del puntero nulo dirección, que se conoce como desreferenciación un puntero nulo. El acceso a punteros nulos produce un comportamiento impredecible porque no apuntan a ubicaciones de memoria legítimas . He aquí un ejemplo:

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

Producción:

conversión de tipos y conversión de tipos en java
 Segmentation fault (core dumped) 

Explicación:

El intento de desreferenciación un puntero nulo da como resultado un Fallo de segmentación , lo que hace que el programa falle con un mensaje de error.

Desbordamiento de pila:

A desbordamiento de pila ocurre cuando la pila de llamadas crece más de lo previsto y contiene información sobre llamadas a funciones. Un recursividad infinita Suele producirse cuando las funciones recursivas carecen de criterios de terminación adecuados. He aquí un ejemplo:

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

Producción:

 Segmentation fault (core dumped) 

Explicación:

El programa inicia un recursión sin fin , que desborda la pila y provoca un error de segmentación.

Variables no utilizadas:

Porque variables no inicializadas tener valores indefinidos , su uso puede provocar errores de tiempo de ejecución. El programa podría proporcionar resultados sorprendentes o colapsar, dependiendo de las circunstancias. He aquí un ejemplo:

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

Producción:

 Some random value (varies each time) 

Explicación:

En este ejemplo, el valor de un variable no inicializada puede ser cualquier valor aleatorio elegido aleatoriamente de la región de memoria designada para esa variable.

Veamos las diferencias entre tiempo de compilación y tiempo de ejecución:

Tiempo de compilación Tiempo de ejecución
Los errores en tiempo de compilación son los errores que se producen en el momento de la compilación y son detectados por el compilador. Los errores de tiempo de ejecución son errores que no genera el compilador y producen un resultado impredecible en el momento de la ejecución.
En este caso, el compilador impide la ejecución del código si detecta un error en el programa. En este caso, el compilador no detecta el error, por lo que no puede impedir la ejecución del código.
Contiene errores de sintaxis y semánticos, como la falta de punto y coma al final de la declaración. Contiene errores como la división por cero y la determinación de la raíz cuadrada de un número negativo.

Ejemplo de error en tiempo de compilación

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

En el código anterior, intentamos imprimir el valor de 'a', pero arroja un error. Colocamos dos puntos al final de la declaración en lugar de un punto y coma, por lo que este código genera un error en tiempo de compilación.

cómo convertir str a int

Producción

Tiempo de compilación vs tiempo de ejecución

Ejemplo de error de tiempo de ejecución

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

En el código anterior, intentamos dividir el valor de 'b' entre cero, y esto genera un error de tiempo de ejecución.

Producción

Tiempo de compilación vs tiempo de ejecución

Conclusión:

En conclusión, los períodos de desarrollo de software conocido como tiempo de compilación y errores de tiempo de ejecución están separados y cada uno tiene un conjunto único de fallas eso podría ocurrir. Errores en tiempo de compilación Esto sucede cuando el código se convierte a formato ejecutable durante el paso de compilación. Estos errores incluyen errores semánticos , que producen ilógico o código absurdo , y fallas de sintaxis , que van en contra de las leyes del lenguaje de programación. Estos errores se identifican por el compilador y reportado, bloqueando la ejecución del código hasta que se arreglen.

Por otro lado, errores de tiempo de ejecución ocurren cuando un programa se está ejecutando y no son detectados por el compilador. Pueden ser el resultado de varias condiciones, incluyendo división por cero, acceso erróneo a la memoria u otros acontecimientos imprevistos. Errores de tiempo de ejecución son más difíciles de descubrir y depurar, ya que con frecuencia provocan fallos del programa o comportamientos inesperados. Para gestionar elegantemente los errores de ejecución y garantizar la estabilidad del programa, los desarrolladores utilizan técnicas de manejo de errores como manejo de excepciones .