Errores más frecuentes P2.1

Uso de constantes en la definición del tamaño de las tablas

En esta práctica he encontrado un número elevado de soluciones que no usaban constantes para  los tamaños de las tablas. Por ejemplo, la definición del tamaño de las matrices del ejercicio 2.3 se parecía más a esto:

int m1[3][3];
int m2[3][3];

que a esto:

#define DIM 3

int m1[DIM][DIM];
int m2[DIM][DIM];

Hay que evitar utilizar número mágicos en el código, y sustituirlos por constante con nombres significativos. Cuando empecéis a trabajar con bucles veréis más claro su utilidad.

Variables innecesarias

Otro error, aunque menos común, ha sido la definición de variables innecesarias. Por ejemplo, incluir una variable para guardar el resultado de la resta de uno al mes introducido por el usuario:

int mes, mes2;

/* más código*/

mes2 = mes - 1;

Cada variable adicional que se defina y que no sea realmente útil, por un lado, entorpece la comprensión del código a otro programador, por otro, ocupa memoria de manera innecesaria. Durante el curso iremos dando consejos para elegir convenientemente las variables auxiliares de tu programa. Un consejo muy importante para grabarse a fuego, nunca dejes declaradas variables que no se empleen.

Definición de variables en cualquier parte del código

Aunque el compilador que emplea Netbeans está configurado para permitir declarar las variables en cualquier parte del código, tenéis que declararlas en los puntos permitidos por el estándar ANSI C (aunque existe dos estándares C89, y C99, cuando se hace referencia a ANSI C es la primera versión). Es habitual que los compiladores acepten código que realmente no está permitido dentro de ese estándar. El problema es que no todos los compiladores aceptan las mismas extensiones, de manera que un código fuente que compila en uno, puede dejar de compilar en otro. Para evitar ese problema se recomienda altamente que el código se ajuste al estándar ANSI C.

En ANSI C, las variables se pueden declarar al comienzo de un bloque, esto es, después de un “{“.

Correcto:

int main {

    int edad;

Incorrecto:

int main {

    printf("Hola\n");

    int edad;

Hay que tener en mente que esta restricción es particular de ANSI C. otros lenguajes permiten declarar variables en medio del código. Incluso, el estándar C99 también lo permite, pero no se encuentra tan extendido como ANSI C.