Errores

Sitio: Facultad de Ingeniería U.Na.M.
Curso: Computación ET-344
Libro: Errores
Imprimido por: Invitado
Día: miércoles, 3 de julio de 2024, 06:33

1. Tipos de Errores

Por supuesto, somos humanos, y por lo tanto nos equivocamos. Los errores de programación pueden clasificarse en varios tipos, dependiendo de la fase en que se presenten.

Recordemos que en C++ tenemos:

En cada una de estas 5 etapas pueden ocurrir errores:

  • Errores de sintaxis
  • Warnings o avisos
  • Errores de enlazado
  • Errores de ejecución
  • Errores de diseño

Veamos cada uno de ellos.

2. Errores de Sintaxis

Los errores de sintaxis, o sintácticos, ocurren cuando el programador escribe código que no va de acuerdo a las reglas de escritura del lenguaje de programación.

Estos errores  son observados durante la Compilación y ocurren porque la sintaxis del lenguaje no es correcta .

Observación:

Muchas veces los alumnos NO observan el texto del Error y este texto es importante para saber el por que del error. Argumentos como que no entienen Inglés suelen ser frecuentes como para evitar interpretar el mensaje de error.

Cuestiones como:

  •    Olvidarnos de un punto y coma al final de una sentencia.
  •     No cerrar llaves en algún bloque de código, método, clase o en alguna estructura de control.
  •     Repetir variables con el mismo nombre aunque sean de diferente tipo.
  •     Asignar en una variable otra variable con tipo de dato diferente:

Ejemplos:

include <iostream> //faltó el #

float x=3  //faltó ;

etc...

En estos casos la etiqueta de la IDE indica : ERROR !



3. Warnings o avisos

Warnings o avisos

Estos no son Errores, como su nombre lo indica son Advertencias y pueden ser ignoradas, pero se recomienda al menos leerlas como para ver si se entienden y están dentro de lo que sabemos y solo decidimos ignorarlo.

Ejemplo: Definir una variable y no usarla genera una advertencia.


4. Errores de enlazado

Antes de ver el por que de los errores de enlazado vamos a tratar mostrar como funciona un compilador. 

Recordemos que el Compilador de C++ es un programa que traduce el códig fuente del programador en un código Objeto ejecutable ( ceros y unos )

El compilador realiza VARIAS pasadas


y en cada una de ellas realiza alguna acción que busca generar el ejecutable.

  •     Toma el l código fuente y realiza un análisis Lexico, Siintáctico y Semántico , esto NO facil de realizar y la comprensión de ello escapa a nuestra materia. En esta etapa controla por ejemplo variables no definidas, palabras claves mas escritas, reemplazo de constantes simbólicas, etc.  
  •    Se incorpora el código fuente correspondiente a las librerías para ir formadno un  código objeto o módulo de objeto. Un programa puede tener muchos objetos y bibliotecas que necesitan ser unidas entre sí para crear el ejecutable.
  •     Se crean los conectores, para enlazar todos los componentes del programa.
  •     Se reasignan los bloques de memoria dentro del programa de modo que una pieza no sobreponga a otra parte en la memoria, esto sería parte de la optimización.
  •     Los archivos compilados se graban en el disco u otro tipo de memoria permanente.
  •     El resultado es un archivo o programa ejecutable.

Como vemos hay varios pasos.

Errores de Enlazado

El compilador intenta enlazar ( unir ,  incorporar ) código fuente de las librerías pero NO las  encuentra, puede ser una función que NO existe en una librería o una Librería que no se encuentra. En este caso tira un error de Enlazado.


5. Errores de ejecución

Estos errores son conocidos también como errores en tiempo de ejecución, el compilador TERMINÓ   su tarea y al ejecutar el programa pueden aparecer estos errores.

Observación:

Recordemos que con la sentencia if se pueden producir ramas o partes de códigos que NO son ejecutadas siempre,  así que podría suceder que durante una ejecución  y con datos determinados NO existan errores de ejecución.

#include <iostream>
using namespace std;
int main(int argc, char *argv[]) { float a,b; cout<<"Ingrese el Dividendo: "<<endl; cin>>a; cout<<"Ingrese el Divisor: "<<endl; cin>>b cout<<"El cociente es : "<<a/b<<endl; return 0; }
Este código por ejemplo para cualquier ingreso en el que b NO sea cero, estaría bien.. pero para b=0, la división por cero generaría sin duda un error.


Otro ejemplo.....
#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char *argv[])
{	float a;
cout<<"Ingrese un númeror: "<<endl; cin>>a; cout<<"la Raiz de : "<<a<< " es :"<<sqrt(a)<<endl; return 0; }
 Si se ingresa un nro negativo va a tirar un error

6. Errores de diseño

Errore s de diseño o errores de lógica, son los mas dificiles de detectar. ¿Por que?

Sucede que cuando uno piensa o razona un ejercicio le resulta dificil tomar distancia y observar el error.

Frecuentemente si uno le pide a otra persona o simplemente deja el asunto y lo retoma mas tarde NO podrá entender como no veía el error.

Por supuesto NO todos los casos son como lo mencionado, algunas veces debemos tomar parpel y lapiz  o simplemente correr el Depurador o Debug para poder entender el por que del error.

Veamos algún ejemplo:



#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{	int acumulador,x;
>cout<<"Ingrese un numeror: "<<endl;
cin>>x;acumulador=acumulador+x;
cout<<"Ingrese un numeror: "<<endl;
cin>>x;acumulador=acumulador+x;
cout<<"Ingrese un numeror: "<<endl;
cin>>x;acumulador=acumulador+x;cout<<"El promedio de los tres numeros ingresados es: "<<acumulador/3<<endl;
return 0;}

Este código tiene dos errores de lógica.
El primero es indicado por el compilador con una Advertencia y el otro es por que estamos realizando división de enteros y por lo tanto nunca vamos a tener un valor del promedio del tipo real lo que estaría mal en terminos generales.
Este tipo de error lógicamente NO es detectado por la IDE ni por el compilador.