La importancia de los “warning” del compilador

He visto como muchos programas que en un principio “corren”, pero más adelante nos dan errores que no tenemos idea de donde vienen, el compilador siempre (o casi siempre) te advierte de esos errores, pero uno lo toma en cuenta. Me he dado cuenta de que algunos compañeros de carrera no se dan cuenta de sus errores, siendo que la respuesta muchas veces esta en el mismo compilador (muchas veces, ya que no siempre la respuesta es tan clara). Por ejemplo, supongamos el siguiente código:

#include<stdio.h>
int main()
{
int variable;
printf("Ingrese un numero: ");
scanf("%i",variable);
printf("Ingresaste el numero %i \n",variable);
return 0;
}

Si lo ejecutamos, nos sale esto:

Cuál fue el error aquí? A simple viste, y si tenemos un programa “largo” nos va a costar mucho encontrarlo, ya que se trata de incluír un & acompañando a la variable en la función scanf :


scanf("%i",variable);

//Se cambia a:

scanf("%i",&variable);

Y ahora sí obtenemos la salida que queríamos:

Mucha gente se puede equivocar con errores fáciles de cometer, y difíciles de encontrar (si el programa es muy largo). Pero si vieramos los avisos del compilador, no tendríamos que buscar tanto, por ejemplo, en un proyecto usando codeblocks, al construir la aplicación antes de compilar (Build= CTRL+F11), el compilador nos tira unos warning en caso de tenerlos, veamos los que nos daba en el programa incorrecto de más arriba:

Aquí el compilador nos dice claramente que en el argumento 2 se esperaba un tipo int*, pero le introducimos un valor de tipo int, por lo tanto si hubiéramos hecho caso a esa alerta, nos habríamos ahorrado algún tiempo buscando errores.

Pero ojo: Esto sólo aparece cuando tenemos un proyecto, ya que si sólo creamos un archivo como programa, sin un proyecto, el programa correría sin aviso alguno de un posible error:

Aquí notamos la importancia de utilizar proyectos para nuestro programas, además de otros beneficios como el debugger, que en un archivo sin proyecto, no temenos la posibilidad de usar, o la posibilidad de incluír nuestras propias librerías, etc.

Pese a lo anterior, existen ocasiones en las que el error no es evidente en los avisos del compilador, veamos el siguiente código de ejemplo:


#include<stdio.h>
void hola(void)
int main()
{
 hola();
 return 0;
}
void hola()
{
 printf("Hola");
}

Si intentamos ejecutar este código, nos tirara el siguiente error:

Este error me apareció ayer, me demore harto en encontrar la razón (obviamente el programa era más largo, unos cientos de líneas divididas en archivos). Y no encontraba la razón del error, y lo que me decía el compilador no era muy claro para mí. El error estaba aquí:


void hola(void)
//Siendo que le faltaba un ;
void hola(void);

Este error me quito harto tiempo de avance, pero lo nombro para recalcar que no siempre los errores estan claros, pero sin duda la mayoría de las veces, los errores te los dice el propio compilador, asi que haganle caso, y arreglenlos desde un principio, aunque sea un inofensivo warning, les ahorrara varios dolores de cabeza más adelante.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s